一旦一個線程處於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循環中的循環結束為止。