Java:中断异常:等待终止
我有以下代码,在下面的箭头处发生中断异常。我应该如何纠正这一点?我相信“关闭”和“终止”的实施是正确的。它是导致中断异常的最后一条if语句。我只想在最终的if语句中检查executor是否正确关闭,所有任务是否正确终止或完成Java:中断异常:等待终止,java,Java,我有以下代码,在下面的箭头处发生中断异常。我应该如何纠正这一点?我相信“关闭”和“终止”的实施是正确的。它是导致中断异常的最后一条if语句。我只想在最终的if语句中检查executor是否正确关闭,所有任务是否正确终止或完成 try { cancelTaskAndDisconnectClient(); System.out.println("2. Disconnected @ " + LocalDateTime.now() + "
try {
cancelTaskAndDisconnectClient();
System.out.println("2. Disconnected @ " + LocalDateTime.now() + " !!!");
// Disable new tasks from being submitted
executor.shutdown();
// wait a while for existing tasks to terminate
if(!executor.awaitTermination(10, TimeUnit.SECONDS)) {
// Cancel currently executing tasks
executor.shutdownNow();
if(!executor.awaitTermination(10, TimeUnit.SECONDS)) { <-- where exception occurred
System.err.println("Executor did not terminate");
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException ie) {
executor.shutdownNow();
ie.printStackTrace();
}
当我运行上面的代码时,如下所示:
System.out.println("2. Disconnected @ " + LocalDateTime.now() + " !!!");
System.err.println("BEFORE: Executor is Shut Down: " + executor.isShutdown() + "; Executor is Terminated: " + executor.isTerminated());
shutdownshutdownAndAwaitTermination();
System.err.println("AFTER: Executor is Shut Down: " + executor.isShutdown() + "; Executor is Terminated: " + executor.isTerminated());
输出为:
BEFORE: Executor is Shut Down: false; Executor is Terminated: false
AFTER: Executor is Shut Down: true; Executor is Terminated: false
2. Disconnected @ 2020-03-12T16:33:15.884436400 !!!
而“断开连接”打印在“之前/之后”之后,此时应真正颠倒顺序。我做错了什么?“我应该如何纠正?”——这取决于您希望发生什么,以及调用
#wait termination
之前线程是否已中断。你想完成什么?获得更多关于你想做什么的信息会很有帮助。现在您正在捕获一个异常,因为您强制中断了执行者的工作进程。您可以在catch block中处理此异常,但是您希望它与您的问题没有真正的关系,但是在捕获InterruptedException
时,最好添加Thread.currentThread().interrupt()
,以恢复线程的状态。我应该如何纠正此问题?您想知道如何捕获InterruptedException
您在这里试图完成的任务吗?您没有在池终止的线程上执行上述关闭操作?“我应该如何更正此问题?”–这取决于您希望发生什么,以及在调用#waittermination
之前线程是否已中断。你想完成什么?获得更多关于你想做什么的信息会很有帮助。现在您正在捕获一个异常,因为您强制中断了执行者的工作进程。您可以在catch block中处理此异常,但是您希望它与您的问题没有真正的关系,但是在捕获InterruptedException
时,最好添加Thread.currentThread().interrupt()
,以恢复线程的状态。我应该如何纠正此问题?您想知道如何捕获您在这里试图完成的InterruptedException
吗?您没有在池终止的线程上执行上述关闭操作?
System.out.println("2. Disconnected @ " + LocalDateTime.now() + " !!!");
System.err.println("BEFORE: Executor is Shut Down: " + executor.isShutdown() + "; Executor is Terminated: " + executor.isTerminated());
shutdownshutdownAndAwaitTermination();
System.err.println("AFTER: Executor is Shut Down: " + executor.isShutdown() + "; Executor is Terminated: " + executor.isTerminated());
BEFORE: Executor is Shut Down: false; Executor is Terminated: false
AFTER: Executor is Shut Down: true; Executor is Terminated: false
2. Disconnected @ 2020-03-12T16:33:15.884436400 !!!