由于在Java中不推荐使用thread.stop(),处理阻塞等待永远不会完成的等待的正确方法是什么?
例如,在运行具有许多客户端的服务器 - 客户端模型时,我的服务器代码可能如下所示:
new Thread(){
@Override
public void run(){
while(accept){
try {
/* attempt to read a single message */
ObjectInputStream is = new ObjectInputStream(s.getInputStream());
Message m = (Message) is.readObject();
/* delegate message to appropriate handler */
MessageDelegator.getInstance().delegate(m);
} catch (IOException | ClassNotFoundException ex) {
}
}
}
}.start();
然而,这里的监听过程是阻塞的,所以设置accept=false;
的经典技巧在这里不起作用(客户端可能永远不会发送任何东西,导致永久挂起的线程)。如果我不再允许使用thread.stop()
?
答案 0 :(得分:0)
您正在寻找thread.interrupt()
。