3

我不断在同步块中遇到此异常,在该块中,我在同步的同一个对象上调用 wait 。线程首先被中断是什么意思?其次,发生这种情况的正常情况是什么?关于可能发生的事情或我应该做什么的任何建议?

4

2 回答 2

3

中断机制用于通知线程它应该尽快终止自己。这允许被中断的线程安全退出,而不会使任何数据处于不一致状态。

于 2012-03-11T03:06:33.587 回答
3

线程首先被中断是什么意思?

这意味着有东西调用Thread.interrupt()了线程对象。这interrupted会在线程上设置标志,并导致某些方法调用以异常终止。

其次,发生这种情况的正常情况是什么?

它通常在第二个线程想要告诉该线程停止它正在做的事情时使用。调用可以是直接的,也可以通过库方法完成。例如,ThreadPoolExecutor.shutdownNow()使用中断来(尝试)终止正在执行的任务。

请注意,中断线程并不能保证停止它。实际上,除非抛出异常,否则线程只会在调用interupted()或时才注意到它已被中断isInterupted()。即使那样,它也可以简单地清除标志并继续,就好像什么都没发生一样。

关于可能发生的事情或我应该做什么的任何建议?

看看什么是“控制”被中断的线程。

于 2012-03-11T03:07:32.653 回答