我在将一个后台线程至于executor中,并使用executor.shutdown(),并且无法终止进入死循环的线程,因为他只会等任务完成。,但是JVM并未退出。
后台线程run方法:
后来发现时 BlockingDeque的take()将线程阻塞了。便使用executor.shutdownNow(),该方法会发出中断信号。正如前面的代码,take()要捕捉中断异常。代码改为如下:
后台线程run方法:
while (true) {
Protocol protocol;
try {
protocol = protocolsQueue.take();
protocol.execute(this);
} catch (InterruptedException e) {
logger.debug("收到服务器中断命令,退出执行协议线程");
}
}
后来发现时 BlockingDeque的take()将线程阻塞了。便使用executor.shutdownNow(),该方法会发出中断信号。正如前面的代码,take()要捕捉中断异常。代码改为如下:
@Override
public void run() {
while (running) {
Protocol protocol;
try {
protocol = protocolsQueue.take();
protocol.execute(this);
} catch (InterruptedException e) {
logger.debug("收到服务器中断命令,退出执行协议线程");
running = false;
}
}
}