終止線程執行的兩種方法


一旦一個線程處於Runnable狀態,它就會連續地執行,直到run()方法結束。Thread早期版本中有一個stop()方法,可以隨時終止線程的執行。由於stop()方法在JDK的較新版本中已建議不再使用。因此,要使用一些技巧來實現這一手段。就我目前接觸到的來看,要分兩種情況:

1.對於繼承Thread類構造線程的情況

 1 public class ClassName extends Thread  2 {  3     private boolean running=false;  4     //該類的域和方法  5     //一般包含如下start()方法用於啟動線程
 6     public void start()  7  {  8         running=true;  9         super.start(); 10  } 11     //一般包含如下halt()方法用於終止線程
12     public void halt() 13  { 14         running=false; 15  } 16     //在run()方法中使用類似於下例的while循環
17     public void run() 18  { 19         while(running) 20  { 21             /*線程要執行的代碼*/
22  } 23  } 24 
25 }

2.對於實現Runnable接口構造線程的情況

注意,下面的stop()和start()方法不是自動被調用的,它們僅提供一種很方便的手段去終止或者啟動線程。

 1 public class ClassName extends Thread  2 {  3     private Thread threadName=null;  4     //該類的域和方法  5     //一般包含如下start()方法用於啟動線程
 6     public void start()  7  {  8         if(threadName==null)  9  { 10             threadName=new Thread(this); 11  threadName.start(); 12  } 13  } 14     //一般包含如下stop()方法用於終止線程
15     public void stop() 16  { 17         threadName=null; 18  } 19     //在run()方法中使用類似於下例的while循環
20     public void run() 21  { 22         Thread currentThread=Thread.currentThread(); 23         while(threadName==currentThread) 24  { 25             /*有適當的代碼調用threadName.sleep(sleeptime)或者threadName.yied()*/
26  } 27  } 28 
29 }

 

Notice:

如果while循環中還使用了循環,此時調用自定義的halt()或者stop()方法可能不能立即終止線程,而是會運行到while循環中的循環結束為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM