9

Thread.interrupt中断诸如sleep,join和之类的调用wait。我想知道它是如何实现的。

我知道Thread.interrupt设置一个标志isInterruptedwait只是轮询这个标志吗?我希望它不会。所以我的问题是如何wait“知道”中断。

4

3 回答 3

2

wait()不投票。interrupt()检查被中断线程的状态。如果它运行,它只是设置标志。如果它在wait()sleep()join()中,则中断线程也将其排队到处理器。当被中断的线程恢复执行时,它首先检查标志,如果标志打开则抛出 InterruptedException。

于 2013-04-15T08:54:35.937 回答
1

等待和加入与睡眠不同,等待/加入不检查中断标志。如果您中断了稍后调用 sleep() 的线程,它将被中断,但如果它调用 wait() 或 join() 则不会发生任何事情。

于 2013-04-15T07:52:12.160 回答
0

这是一个操作系统问题,因为系统正在处理线程而不是 JVM。每个操作系统以不同的方式处理线程

于 2013-04-15T07:41:16.870 回答