如何终止从ExecutorService生成的线程

时间:2014-11-13 19:00:24

标签: java multithreading sockets thread-safety threadpool

我有以下问题:

我正在运行一个服务器,该服务器与在Thread生成的单独ExecutorService中连接的所有客户建立TCP连接。我有一个exit命令,它应该终止服务器,包括由ExecutorService生成的所有线程。在与客户端相关的每个特定Thread中,我有一个while - 循环,我在等待客户端使用相关套接字的InputStream输入的条件。我还有一个全局boolean变量,它指示服务器是否在线。一旦转向false,我就打破循环并终止线程。看起来基本上是这样的:

// userInput - String
// in - BufferedReader associated with the input stream of the client's socket
while ((userInput = in.readLine()) != null && serverIsOnline) { 
     //do some stuff
}

然而,问题是in.readLine()是阻塞操作,因此除非所有客户输入内容,否则整个服务器都不会被终止。 ExecutorService.shutDownNow()也不起作用,因为在这种情况下中断是无效的,因为线程被另一个操作阻塞。我也想避免System.exit()。任何有效的解决方案?

1 个答案:

答案 0 :(得分:1)

尝试关闭所有客户端套接字。在这种情况下,所有读取线程都应抛出IOException。

相关问题