繁体   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