簡體   English   中英

如何在不使用 Thread.stop() 的情況下重新啟動線程?

[英]How to restart thread without using Thread.stop()?

我有一個客戶端 - 服務器應用程序,它運行接收方法以在單獨的線程中運行。 給線程一些時間來完成作業,線程將被檢查狀態。

有時會因為數據包或 ACK 丟失而阻塞接收方法。 如果發生這種情況,我如何停止線程並在下次嘗試時再次啟動它?

眾所周知,Thread.stop() 已被棄用。

無論是否使用Thread.stop(). ,您都無法重新啟動 Java 線程Thread.stop().

你必須創建一個新的。

但是,您可以重用Runnable.

您可以使用中斷發送到線程並處理它們以進行重試。 這是一個示例,它將啟動一個線程,該線程在設置布爾值 done 之前不會退出。 但是,我正在從主線程中斷線程以使其重新開始。

public class Runner implements Runnable {

    private boolean done;

    @Override
    public void run() {
        while (!done) {
            try {
                doSomeLongRunningStuff();

            } catch (InterruptedException e) {
                System.out.println("Interrupted..");
            }
        }
    }

    private void doSomeLongRunningStuff() throws InterruptedException {
        System.out.println("Starting ... ");
        Thread.sleep(300);
        System.out.println("Still going ... ");
        Thread.sleep(300);
        done = true;
        System.out.println("Done");
    }

    public static void main(final String[] args) throws InterruptedException {
        final Thread t = new Thread(new Runner());
        t.start();
        Thread.sleep(500);
        t.interrupt();
        Thread.sleep(500);
        t.interrupt();
    }
}

您是否可以這樣做取決於您在調用什么。 執行 TCP 連接的框架可能支持也可能不支持中斷。

一旦線程完成執行,我們不應該重新啟動無效的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM