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