【发布时间】:2014-01-19 06:08:49
【问题描述】:
我在理解 Java 的线程中断标志的语义时遇到了一些麻烦。我的理解是,该标志只应在线程中断后为真,一旦设置为真,在InterruptedException 或等效项被捕获或使用.interrupted() 明确清除标志之前,不会再次为假。因此,我无法解释为什么下面的程序会打印出false:
Thread t = new Thread() {
@Override
public void run() {
try {
// While await()ing, another thread calls t.interrupt().
new CyclicBarrier(2).await();
} finally {
// I believe I should still be interrupted here, but am not...
System.out.println(Thread.currentThread().isInterrupted());
}
}
};
(为简单起见,排除了一些细节 - 假设 run() 可以抛出异常。)
【问题讨论】:
标签: java concurrency interrupted-exception