首頁 > Java > java教程 > 主體

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

Mary-Kate Olsen
發布: 2024-11-22 09:27:11
原創
755 人瀏覽過

How to Safely Stop a Java Thread Without Using `Thread.stop()`?

如何在不使用已棄用的Thread.stop() 方法的情況下有效地終止執行緒

Java Thread 類別提供了stop() 方法作為終止執行緒的方法,但它已被棄用,不應使用。本文介紹了一種使用中斷方法終止執行緒的替代方法。

使用中斷來停止執行緒

而不是直接呼叫stop(),這是不安全的並且可能導致資料損壞,我們可以使用中斷向執行緒發出訊號,告知它應該正常終止。它的工作原理如下:

public class InterruptedExceptionExample {

    private static volatile boolean shutdown = false;

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!shutdown) {
                try {
                    System.out.println("Running...");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        thread.start();
        System.out.println("Press enter to quit");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        shutdown = true;
        thread.interrupt();
    }
}
登入後複製

在此程式碼中:

  1. 我們建立一個在循環中無限期運行的線程,每5 秒列印一次「Running.. .」。
  2. 我們有一個初始化為 false 的靜態布林標誌(關閉),它將用於向線程發出信號stop.
  3. 線程的 run() 方法定期檢查關閉標誌。如果設定為 true,則執行緒退出循環。
  4. main() 方法建立線程,啟動它,然後等待使用者輸入將關閉標誌設為 true。
  5. 最後,使用interrupt() 優雅地終止執行緒。

使用的優點中斷:

與已棄用的stop() 相比,中斷執行緒有幾個優點:

  • 優雅終止:中斷的執行緒有機會清理在退出之前啟動任何資源或執行任何必要的任務。
  • 異常拋出: 中斷會導致某些方法(例如 sleep() 和 wait())拋出 InterruptedException 異常。編寫良好的線程可以捕獲這些異常來處理中斷。
  • 安全穩健:與可能導致資料損壞的 stop() 不同,中斷是一種更安全、更可靠的終止方式一個執行緒。

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

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