如何停止java的執行緒一直是一個開發多執行緒程式常遇到的一個問題。也有很多人問過我,所以今天在這裡總結一下希望可以讓更多的人知道在java中如何安全的結束一個正在運行的線程。
在Java的多執行緒程式設計中,java.lang.Thread型別包含了一些列的方法start(), stop(), stop(Throwable) and suspend( ), destroy() and resume()。透過這些方法,我們可以對執行緒進行方便的操作,但是這些方法中,只有start()方法得到了保留。
在JDK幫助文件以及Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》中都講解了捨棄這些方法的原因。
那麼,我們究竟該如何停止執行緒呢?
用共享變數的方式
在這種方式中,之所以引入共享變量,是因為該變數可以被多個執行相同任務的執行緒用來作為是否中斷的信號,通知中斷線程的執行。
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(3000); // 主线程延迟3秒 thread.exit = true; // 终止线程thread thread.join(); System.out.println("线程退出!"); } }
在上面程式碼中定義了一個退出標誌exit,當exit為true時,while循環退出,exit的預設值為false。在定義exit時,使用了一個Java關鍵字volatile,這個關鍵字的目的是讓exit同步,也就是說在同一時刻只能由一個執行緒來修改exit的值。
以上是java 怎麼停止一個線程的詳細內容。更多資訊請關注PHP中文網其他相關文章!