Java:中断异常:等待终止

Java:中断异常:等待终止,java,Java,我有以下代码,在下面的箭头处发生中断异常。我应该如何纠正这一点?我相信“关闭”和“终止”的实施是正确的。它是导致中断异常的最后一条if语句。我只想在最终的if语句中检查executor是否正确关闭,所有任务是否正确终止或完成 try { cancelTaskAndDisconnectClient(); System.out.println("2. Disconnected @ " + LocalDateTime.now() + "

我有以下代码,在下面的箭头处发生中断异常。我应该如何纠正这一点?我相信“关闭”和“终止”的实施是正确的。它是导致中断异常的最后一条if语句。我只想在最终的if语句中检查executor是否正确关闭,所有任务是否正确终止或完成

        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 !!!