【发布时间】:2016-02-20 13:17:58
【问题描述】:
我正在编写一个简单的多线程聊天服务器。每个客户端在连接时都在创建新线程
Thread listenThread = new Thread(() -> {
while (true) {
try {
Socket client = serverSocket.accept();
ClientThread handler = new ClientThread(this, client);
clients.add(handler);
handler.start();
} catch (SocketException e) {
if (e.getMessage().contains("socket closed"))
break;
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
此方法适用于检查客户端是否关闭连接。
class ClientThread extends Thread {
@Override
public void run() {
while(running) {
int read = inputStream.read();
if(read > 0) {
// read
}
else if(read < 0)
running = false;
}
}
};
问题是,当我想停止服务器时,我无法中止线程,因为inputStream.read() 会阻止执行,因此将running 变量设置为false 无效。如何让它发挥作用?
【问题讨论】:
标签: java multithreading sockets network-programming