[英]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.