ThreadExecutor在无限循环中强制执行Thread

时间:2014-03-10 21:20:07

标签: java multithreading

我有一个多线程服务器应用程序。其中一个Runnables使用无限循环来检查连接。这是使用socket = serverSocket.accept()完成的,这是一个阻止调用。

当我关闭我的服务器时,我想阻止所有线程执行。 我尝试了threadExecutor.shutdown()threadExecutor.shutdownNow()

这些功能似乎都没有杀死我上面提到的线程。

你能帮我解决一下吗? 提前谢谢!

2 个答案:

答案 0 :(得分:3)

  

当我关闭我的服务器时,我想阻止所有线程执行。

当某个帖子在serverSocket.accept()中被阻止时,阻止它的唯一方法就是从其下方关闭serverSocket。然后,accept调用将抛出一个IOException,可以捕获该线程,然后该线程将退出。

如果你还需要停止客户端处理程序线程,那么你需要让它们监听线程中断。中断线程并不会阻止它运行,但会在线程上设置中断标志,并会导致抛出InterruptedException的任何方法。要中断ExecutorService中的线程,您可以调用threadExecutor.shutdownNow()。但是,这不会中断accept()调用。

通常在线程句柄循环中,我们执行以下操作:

while (!Thread.currentThread().isInterrupted()) {
   ...
}

答案 1 :(得分:2)

可能的解决方案:在服务器关闭期间连接到套接字并写入 STOP 消息。收到此 STOP 消息后,让线程break退出无限循环。