停止執行緒的方式

2021-07-10 17:25:50 字數 1835 閱讀 2949

當開啟乙個執行緒後我們怎麼去停止它呢?停止執行緒的方法:

1、stop方法(已過時)

2.、run方法結束,當run方法中的任務**執行完後,執行緒自動結束

怎麼控制線程的任務結束呢?  任務中都會有迴圈結構(讓執行緒重複執行**),只要控制住迴圈就可以結束任務,結束執行緒。

控制迴圈通常就用定義標記來完成。下例:

class stopthread implements runnable

} public void setflag() }

class stopthreaddemo

system.out.println("main..."+num); //表示main函式即主線程的執行

} system.out.println("over");

} }

執行結果:

當我們改變run方法的**時,即讓執行緒等待:

public synchronized void run()

catch(interruptedexception e)

system.out.println(thread.currentthread().getname()+"...");

}}

執行結果:

發現程式並沒有停止,這是因為執行緒t1、t2處於等待狀態。

但是如果執行緒處於了凍結狀態,無法讀取標記,如何結束呢?

可以使用interrupt()方法將執行緒從凍結狀態強制恢復到執行狀態中來,讓執行緒具備cpu的執行資格。但是強制動作會發生interruptedexception(中斷異常),所以要處理。interrupt():清除執行緒的凍結狀態,讓執行緒恢復具備cpu的執行資格的狀態。改寫上例:

class stopthread implements runnable

catch(interruptedexception e)

system.out.println(thread.currentthread().getname()+"...");

} }public void setflag() }

class stopthreaddemo

system.out.println("main..."+num); //表示main函式即主線程的執行

} system.out.println("over");

} }

執行結果:

引申:守護執行緒

如果我們將**中的t2.interrupt()去掉,那麼執行緒t2將不會結束,程式也就不會結束,這時我們可以將t2定義為守護執行緒,守護執行緒執行在後台,當前臺的執行緒全部執行結束後,守護執行緒自動消失。它依附於前台執行緒存在。

在main函式中這樣定義:

public static void main(string args)

system.out.println("main..."+num); //表示main函式即主線程的執行

} system.out.println("over");

}

執行結果:

執行緒停止的幾種方式

使用stop方法強制使執行緒退出,但是該方法不太安全所以已經被廢棄 設定標記位,可以使執行緒正常退出 使用thread類中的乙個interrupt 可以中斷執行緒 package com.li.執行緒中斷和優先順序0427 public class testmytreadstop1 catch in...

多執行緒核心3 執行緒的正確停止方式

threadone.isinterrupted thread 0執行緒被請求中斷,返回true threadone.interrupted 與thread.interrupted 由於interrupted 方法為靜態方法,呼叫它的物件為rightwayinterrupted類,因為main執行緒未...

執行緒的停止

執行緒停止 執行緒的停止 1.停止乙個執行緒 我們一般都會通過乙個變數去控制的。2.如果需要停止乙個處於等待狀態下的執行緒,那麼我們需要通過變數配合notify方法或者interrupt 來使用。public class threaddemo5 extends thread public synch...