如何阻止阻塞等待的线程?

时间:2014-09-14 14:22:27

标签: java multithreading hang

由于在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()

,我怎么能杀死这个帖子?

1 个答案:

答案 0 :(得分:0)

您正在寻找thread.interrupt()