久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

終止線程的三種方法

 翼ZYDREAM 2018-11-26

 有三種方法可以使終止線程。

    1.  使用退出標志,使線程正常退出,,也就是當run方法完成后線程終止。

    2.  使用stop方法強行終止線程(這個方法不推薦使用,因為stop和suspend,、resume一樣,也可能發(fā)生不可預料的結果),。

    3.  使用interrupt方法中斷線程,。

    1. 使用退出標志終止線程

    當run方法執(zhí)行完后,線程就會退出,。但有時run方法是永遠不會結束的,。如在服務端程序中使用線程進行監(jiān)聽客戶端請求,或是其他的需要循環(huán)處理的任務。在這種情況下,,一般是將這些任務放在一個循環(huán)中,,如while循環(huán)。如果想讓循環(huán)永遠運行下去,,可以使用while(true){……}來處理,。但要想使while循環(huán)在某一特定條件下退出,最直接的方法就是設一個boolean類型的標志,,并通過設置這個標志為true或false來控制while循環(huán)是否退出,。下面給出了一個利用退出標志終止線程的例子。

  1. package chapter2;
  2. public class ThreadFlag extends Thread
  3. {
  4. public volatile boolean exit = false;
  5. public void run()
  6. {
  7. while (!exit);
  8. }
  9. public static void main(String[] args) throws Exception
  10. {
  11. ThreadFlag thread = new ThreadFlag();
  12. thread.start();
  13. sleep(5000); // 主線程延遲5秒
  14. thread.exit = true; // 終止線程thread
  15. thread.join();
  16. System.out.println("線程退出!");
  17. }
  18. }


在上面代碼中定義了一個退出標志exit,,當exit為true時,,while循環(huán)退出,exit的默認值為false.在定義exit時,,使用了一個Java關鍵字volatile,,這個關鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值,,

    2. 使用stop方法終止線程

    使用stop方法可以強行終止正在運行或掛起的線程,。我們可以使用如下的代碼來終止線程:

thread.stop();


雖然使用上面的代碼可以終止線程,但使用stop方法是很危險的,,就象突然關閉計算機電源,,而不是按正常程序關機一樣,可能會產生不可預料的結果,,因此,,并不推薦使用stop方法來終止線程。

    3. 使用interrupt方法終止線程

    使用interrupt方法來終端線程可分為兩種情況:

    (1)線程處于阻塞狀態(tài),,如使用了sleep方法,。

    (2)使用while(!isInterrupted()){……}來判斷線程是否被中斷,。

    在第一種情況下使用interrupt方法,,sleep方法將拋出一個InterruptedException例外,而在第二種情況下線程將直接退出,。下面的代碼演示了在第一種情況下使用interrupt方法,。

  1. package chapter2;
  2. public class ThreadInterrupt extends Thread
  3. {
  4. public void run()
  5. {
  6. try
  7. {
  8. sleep(50000); // 延遲50秒
  9. }
  10. catch (InterruptedException e)
  11. {
  12. System.out.println(e.getMessage());
  13. }
  14. }
  15. public static void main(String[] args) throws Exception
  16. {
  17. Thread thread = new ThreadInterrupt();
  18. thread.start();
  19. System.out.println("在50秒之內按任意鍵中斷線程!");
  20. System.in.read();
  21. thread.interrupt();
  22. thread.join();
  23. System.out.println("線程已經退出!");
  24. }
  25. }


上面代碼的運行結果如下:

  1. 在50秒之內按任意鍵中斷線程!
  2. sleep interrupted
  3. 線程已經退出!


在調用interrupt方法后, sleep方法拋出異常,,然后輸出錯誤信息:sleep interrupted.

    注意:在Thread類中有兩個方法可以判斷線程是否通過interrupt方法被終止,。一個是靜態(tài)的方法interrupted(),一個是非靜態(tài)的方法isInterrupted(),,這兩個方法的區(qū)別是interrupted用來判斷當前線是否被中斷,,而isInterrupted可以用來判斷其他線程是否被中斷,。因此,while (,!isInterrupted())也可以換成while (,!Thread.interrupted())。

文章出自 http://www./pdb/java/200904/161228_3.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多