首頁 > Java > java教程 > 如何在不使用 stop() 的情況下安全地終止 Java 執行緒?

如何在不使用 stop() 的情況下安全地終止 Java 執行緒?

Susan Sarandon
發布: 2024-11-29 15:01:10
原創
781 人瀏覽過

How Can I Safely Kill a Thread in Java Without Using `stop()`?

不使用 stop() 殺死執行緒

在多執行緒程式設計中,可能有必要終止執行緒。雖然 stop() 方法提供了一個突然的解決方案,但由於潛在的資源洩漏,不鼓勵使用它。本文研究了執行緒終止的另一種方法:中斷。

使用中斷

中斷方法向執行緒發出訊號以優雅地終止其執行。呼叫時,執行緒檢查其中斷狀態,如果為 true,則拋出 InterruptedException。可以在執行緒的 run 方法中擷取並處理此異常,使其清理資源並正常退出。

以下是使用中斷的範例:

public class HelloWorld {

    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {

            public void run() {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Thread.sleep(5000);
                        System.out.println("Hello World!");
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
        thread.start();
        System.out.println("press enter to quit");
        System.in.read();
        thread.interrupt();
    }
}
登入後複製

注意事項

  • 中斷執行緒會導致sleep() 和wait()立即拋出InterruptedException,防止無限阻塞。
  • 被停止的執行緒應該配合檢查中斷狀態,捕獲InterruptedException退出運行循環。
  • 在catch區塊中對當前線程設定中斷最好練習,但在簡單情況下可能沒有必要。

已發佈程式碼

發佈的程式碼有幾個問題:

  • 目前執行緒在實例變數中引用,這可能無法準確反映正在執行的執行緒。
  • 對線程活動性的檢查總是返回true,而中斷會清除中斷標誌並且是不必要的

總之,使用中斷提供了一種更受控制的線程終止方法,確保正確清理資源。不過,這需要被停止的線程的配合。

以上是如何在不使用 stop() 的情況下安全地終止 Java 執行緒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板