如何在不使用Thread.stop()的情况下重新启动线程?

时间:2015-11-04 07:25:27

标签: java multithreading network-programming

我有一个客户端 - 服务器应用程序,它运行receive方法以在单独的线程中运行。线程有一些时间来完成作业,线程将被检查状态。

有些情况下,由于数据包或ACK丢失,接收方法将被阻止。如果发生这种情况,我怎样才能停止线程并在下次尝试时再次启动它?

众所周知,不推荐使用Thread.stop()。

3 个答案:

答案 0 :(得分:2)

无论是否有Runnable.

,您都无法重启Java线程

你必须创建一个新的。

然而,您可以重复使用 ActiveSheet.PivotTables(sPivotName).PivotFields(sPivotField).CurrentPage = "(All)" ActiveSheet.PivotTables(sPivotName).PivotFields(sPivotField).ClearAllFilters ActiveSheet.PivotTables(sPivotName).PivotFields(sPivotField).CurrentPage = CStr(rsDate("MaxValue"))

答案 1 :(得分:0)

您可以使用中断发送到线程并处理它们以进行重试。下面是一个示例,它将启动一个在设置boolean 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连接的框架可能支持也可能不支持中断。

答案 2 :(得分:0)

一旦线程执行完毕,我们就不应该重启一个无效的线程。