我有一个客户端 - 服务器应用程序,它运行receive方法以在单独的线程中运行。线程有一些时间来完成作业,线程将被检查状态。
有些情况下,由于数据包或ACK丢失,接收方法将被阻止。如果发生这种情况,我怎样才能停止线程并在下次尝试时再次启动它?
众所周知,不推荐使用Thread.stop()。
答案 0 :(得分:2)
无论是否有Runnable.
你必须创建一个新的。
然而,您可以重复使用 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)
一旦线程执行完毕,我们就不应该重启一个无效的线程。