我有以下问题:
我正在运行一个服务器,该服务器与在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()
。任何有效的解决方案?
答案 0 :(得分:1)
尝试关闭所有客户端套接字。在这种情况下,所有读取线程都应抛出IOException。