Java Thread interrupt() - 执行速度有多快?

时间:2018-03-15 16:27:37

标签: java multithreading interrupt

调用Thread方法后interrupt()需要停止/消失多长时间?

请考虑以下代码:

public class MyThread {
    public boolean flag = true;
    public void run() {
        while(flag) {
            doSomething();
            Thread.sleep(20);
        }
    }
}

void foo() {
    MyThread t = new MyThread();
    t.start();
    Thread.sleep(100);
    t.flag = false;
    t.interrupt();
}

作业t.flag = false;是否有效?换句话说,一个线程可以退出其run()方法并终止"通常"在它被打断之前?

similar question

2 个答案:

答案 0 :(得分:2)

要共享数据,需要volatile。最好是捕获InterruptedException。

public class MyThread {
    public volatile boolean flag = true;
    public void run() {
        try {
            while(flag) {
                doSomething();
                Thread.sleep(20);
            }
        } catch (InterruptedException ie) {
            ...
        }
    }
}

答案 1 :(得分:0)

再次检查isInterrupted,ahd再次抛出它,因为当它返回true时会消耗该消息。

POST    /network-map/publish    
POST    /network-map/ack-parameters     
GET     /network-map    
GET     /network-map/node-info/{hash}   
GET     /network-map/network-parameters/{hash}

使旗帜不必要。

如果要使用该标志并优雅地完成代码,则不需要使用中断并捕获异常。