关闭BlockingDeque

我在将一个后台线程至于executor中,并使用executor.shutdown(),并且无法终止进入死循环的线程,因为他只会等任务完成。,但是JVM并未退出。
后台线程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;
			}
		}
	}

你可能感兴趣的:(jvm)