關於java中怎麼終止一個執行緒的執行
阿新 • • 發佈:2019-01-31
其實現在要對一個迴圈執行的執行緒關閉,對迴圈執行體設定執行標誌是常見的方法。另外一種方法是使用interrupt方法中斷執行緒方式關閉執行緒。
使用interrupt方法中斷執行緒來退出執行緒
sleep wait io阻塞的情況下,對於這種執行緒退出的可以採用這種方法。主要方法原理就是使用interrupt方法設定中斷狀態,然後在catch程式碼塊中執行如下邏輯。
catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.e(LOG_TAG, "I'M exit exit ....");
e.printStackTrace();
break ;
}
來退出執行緒。
給子執行緒設定標誌位關閉子執行緒
package chapter2;
public class ThreadFlag extends Thread
{
public volatile boolean exit = false;//設定停止標誌位
public void run()
{
while (!exit);
}
public static void main(String[] args) throws Exception
{
ThreadFlag thread = new ThreadFlag();
thread.start();
sleep(5000); // 主執行緒延遲5秒
thread.exit = true; // 設定終止子執行緒thread
thread.join();
System.out.println("執行緒退出!");
}
}
第二個例子
public class AlternateStop extends Object implements Runnable {
private volatile boolean stopRequested;//停止執行緒標誌位
private Thread runThread;//指向當前執行的執行緒
public void run() {
runThread = Thread.currentThread();
stopRequested = false;
int count = 0;
while ( !stopRequested ) {
System.out.println("Running ... count=" + count);
count++;
try {
Thread.sleep(300);
} catch ( InterruptedException x ) {
Thread.currentThread().interrupt();
//當設定執行緒中斷時,sleep方法會拋InterruptedException 異常,也可以在這裡退出執行。
}
}
System.out.println("stoped");
}
public void stopRequest() {//設定執行緒停止請求。
//同時設定標誌位和設定執行緒中斷標誌
stopRequested = true;
if ( runThread != null ) {
runThread.interrupt();
}
}
public static void main(String[] args) {
AlternateStop as = new AlternateStop();
Thread t = new Thread(as);
t.start();
try {
Thread.sleep(2000);
} catch ( InterruptedException x ) {
// ignore
}
as.stopRequest();
}
}
可能的執行結果如下:
Running ... count=0
Running ... count=1
Running ... count=2
Running ... count=3
Running ... count=4
Running ... count=5
Running ... count=6
stoped