【发布时间】:2014-02-05 19:32:06
【问题描述】:
认为客户端已经连接到服务器并且它正在使用多个线程同时为多个客户端提供服务,并且需要为新来者关闭服务器并且客户端已经在服务器中不应该被打扰。我们该怎么做?
【问题讨论】:
-
结束循环接受新连接。如果您想要更详细的答案,请先显示您的代码。
标签: java network-programming client-server
认为客户端已经连接到服务器并且它正在使用多个线程同时为多个客户端提供服务,并且需要为新来者关闭服务器并且客户端已经在服务器中不应该被打扰。我们该怎么做?
【问题讨论】:
标签: java network-programming client-server
做这样的事情:
public class TheThreadClass extends Thread{
private bool terminated;
public void terminate(){
this.terminate = true;
}
@Override
public void run(){
while(!terminated){
// thread code here
}
}
}
【讨论】:
Thread.interrupt() 以获得更好的效果,并使用Thread.isInterrupted(), 并保存额外的布尔值和方法。但是这些都不会解除ServerSocket.accept().
只需关闭ServerSocket.accept() 中阻塞的线程将抛出一个IOException: socket closed,,它应该退出。然后不会接受新的连接,但所有现有的连接将继续得到服务。
【讨论】:
我觉得 interrupt() 方法可能是终止线程的最佳且简单的方法。
【讨论】: