调用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()
方法并终止"通常"在它被打断之前?
答案 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}
使旗帜不必要。
如果要使用该标志并优雅地完成代码,则不需要使用中断并捕获异常。