Thread.interrupt
会中断sleep
,join
和wait
等来电。我想知道它是如何实现的。
我知道Thread.interrupt
设置了一个标记isInterrupted
。 wait
只是轮询这个标志吗?我希望它没有。所以我的问题是wait
如何“知道”中断。
答案 0 :(得分:2)
wait()
不会进行投票。 interrupt()
检查被中断线程的状态。如果它运行,它只是设置标志。如果它位于wait()
,sleep()
或join()
中,则中断线程也会将其排入处理器。当被中断的线程恢复执行时,它首先检查该标志,如果该标志已打开则抛出InterruptedException。
答案 1 :(得分:1)
等待和加入工作的方式与睡眠不同,等待/加入不检查中断标志。如果你打断了一个稍后调用sleep()的线程,它会被中断,但如果它调用wait()或join(),就不会发生任何事情。
答案 2 :(得分:0)
这是一个操作系统问题,因为系统正在处理线程而不是JVM。每个操作系统以不同的方式处理线程