<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      線程中斷到底是什么

      提示:更多優秀博文請移步博主的GitHub倉庫:GitHub學習筆記Gitee學習筆記

      我們如何讓線程安全的停止呢?

      1. 線程自然終止

      自然執行完或拋出未處理異常。

      2. stop(),resume(),suspend()方法

      stop(),resume(),suspend()已不建議使用,stop()會導致線程不會正確釋放資源,suspend()容易導致死鎖。

      • 停止多線程: public void stop();
      • 銷毀多線程: public void destory();
      • 掛起線程: public final void suspend(); 暫停執行
      • 恢復掛起的線程執行: public final void resume();

      3. 線程中斷

      Thread類提供了interrupt方法,用于中斷目標線程的執行。

      3.1 interrupt方法

      interrupt()方法用于中斷一個線程,而Java中線程的處理是協作式的而不是搶占式的。所謂協作式的意思是:實際上調用一個線程的interrupt() 方法中斷一個線程,并不是強行關閉這個線程,只是跟這個線程打個招呼,將線程的中斷標志位置為true,線程是否中斷,由線程本身決定。

      public class UserRunnable implements Runnable {
          @Override
          public void run() {
              while (true){
                  System.out.println(Thread.currentThread().getName()+"is running");
              }
          }
      }
      
      public class SafeExitTest {
          public static void main(String[] args) {
              Thread thread = new Thread(new UserRunnable());
              thread.start();
              thread.interrupt();
          }
      }
      

      我們可以看到,在UserRunnable線程中,我們并沒有對中斷進行任何處理,所以在SafeExitTest中調用線程的interrupt方法并不會導致線程的中斷,控制臺還是會繼續打印。只有在目標線程中進行了正確的中斷處理后才會有中斷效果:

      public class UserRunnable implements Runnable {
          @Override
          public void run() {
              while (!Thread.currentThread().isInterrupted()) {//判斷當前線程是否被中斷
                  System.out.println(Thread.currentThread().getName() + "is running");
              }
          }
      }
      

      Thread類中相關方法

      • isInterrupted() :判定指定線程是否處于中斷狀態。
      • static interrupted() :靜態方法,判定當前線程是否處于中斷狀態,同時將中斷標志位改為false。

      3.2 阻塞線程與線程中斷

      Java中斷響應是描述當一個線程或方法A處于運行、阻塞或死鎖狀態時,外界(通常指其他線程、系統IO等)對A的影響能否讓A線程或者方法拋出InterruptedException異常并提前返回,如果會提前返回并且拋出InterruptedException,就叫可中斷響應方法或線程,如果不會拋出InterruptedException,就叫不可中斷線程或方法。

      Java語言中所有阻塞方法都聲明拋出InterruptedException異常(例如 Thread.sleep()Thread.join()Object.wait())。也就是說,如果一個線程執行了阻塞方法,使得當前線阻塞,第三方線程執行interrupt方法中斷線程,都會使得該阻塞方法拋出InterruptedException異常并退出阻塞,并且將當前線程的中斷標志位設置為false

      如果沒有這個機制, interrupt() 則只是單純設置線程的中斷狀態。那這個試圖中斷的線程仍在阻塞當中,那么后序的中斷工作則無法進行。

      3.3 阻塞線程的線程中斷案例

      public class UserRunnable implements Runnable {
          @Override
          public void run() {
              while (!Thread.currentThread().isInterrupted()) {
                  System.out.println(Thread.currentThread().getName() + "is running");
                  try {
                      Thread.sleep(10);//第7行
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          }
      }
      
      public class SafeExitTest {
          public static void main(String[] args) throws InterruptedException {
              Thread thread = new Thread(new UserRunnable());
              thread.start();
              Thread.sleep(10);
              thread.interrupt();//第6行
          }
      }
      

      上面的代碼我們僅僅是在每次循環的時候讓線程sleep了10ms,但這很有可能會導致中斷操作的失敗(注意這里說的是很有可能)。

      在這里插入圖片描述

      可以看到控制臺不斷輸出"Thread-0is running",這是因為在執行SafeExitTest:6(SafeExitTest類的第6行代碼)這行代碼時,目標線程處于阻塞狀態,此時UserRunnable:7這行代碼拋出InterruptedException異常,線程退出阻塞狀態,并將中斷標志位設置為false。這也就是為什么雖然在while語句中對中斷標志位進行了判斷,而在主線程試圖中斷目標線程時,目標線程仍能繼續循環的原因。

      經過多次測試也會出現中斷成功的情況:

      在這里插入圖片描述

      出現這種情況,是因為中斷操作放生在第一次循環完成和第二次循環判斷開始之前。

      具體細節參考

      https://blog.csdn.net/meiliangdeng1990/article/details/80559012

      https://www.ibm.com/developerworks/cn/java/j-jtp05236.html

      posted @ 2020-03-27 09:28  聽到微笑  閱讀(8)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 在线欧美中文字幕农村电影| 亚洲成在人线在线播放无码 | 国产suv精品一区二区四| 国产性生大片免费观看性| 久久精品噜噜噜成人av| 蜜臀91精品高清国产福利| 文山县| 亚洲大尺度无码无码专线| 国产成人综合欧美精品久久| 亚洲人成电影在线天堂色| 另类 专区 欧美 制服| 国产乱码日产乱码精品精| 亚洲高潮喷水无码AV电影| 亚洲黄色一级片在线观看| 骚虎视频在线观看| 国产高清在线精品一区二区三区 | 河池市| 精品人妻二区中文字幕| 人妻丝袜无码专区视频网站 | 91人妻熟妇在线视频| 伊人春色激情综合激情网| 亚洲中文无码av在线| 久久亚洲精品成人综合网| 桃花岛亚洲成在人线AV| 无码精品国产VA在线观看DVD| 色五月丁香五月综合五月| 欧美成人www免费全部网站| 夜夜躁狠狠躁日日躁| 高清有码国产一区二区| 日韩中文字幕人妻精品| 老司机精品成人无码AV| 亚洲国产一区二区三区久| 欧美日产国产精品日产| 久久久久国产精品人妻| 国产明星精品无码AV换脸| 亚洲欧洲∨国产一区二区三区| 国产初高中生视频在线观看 | 亚洲欧洲∨国产一区二区三区| 好大好硬好爽免费视频| 97成人碰碰久久人人超级碰oo| 日韩丝袜亚洲国产欧美一区|