【发布时间】:2014-01-07 10:39:45
【问题描述】:
考虑以下 JUnit 测试:
@Test
public void testSettingInterruptFlag() throws InterruptedException {
Thread blockingThread = new Thread(new Runnable() {
@Override
public synchronized void run() {
try {
wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
blockingThread.start();
blockingThread.interrupt();
blockingThread.join();
assertTrue(blockingThread.isInterrupted());
}
即使设置了中断状态,测试也会失败。
我怀疑blockingThread.join(); 行重置了标志,但即使用Thread.sleep(3000); 替换该行,测试仍然失败。这种行为是否记录在任何地方?
【问题讨论】:
-
你有没有试过把
sleep(1000)放在调用consumerThread.interrupt()?启动线程是本机调用,但我不确定在启动调用完成后线程实际上已经开始运行。 -
是的,我猜错了,Alexei 下面的回答似乎可以解释症状。
标签: java concurrency