我想了解中断如何与Thread.sleep()和Thread.join()一起工作。如何中断和Thread.sleep()/ Thread.join()动作
例如,如果在一个线程,说t1
,我执行Thread.sleep()
后从另一个线程我叫t1.interrupt()
然后Thread.sleep()
抛出和InterruptException。
我想知道的是这一切的机制。正如我所看到的sleep()
是一个静态方法,它如何检测到中断已发送到它所调用的线程?
对于案例t1.join()
类似,该方法如何看到执行ti.join()
的线程已收到中断并抛出异常?有没有一种联系?
考虑到这是实施和特定平台,您希望从答案中获得哪些洞察?这怎么帮助你解决一些编程问题?即你的问题的根本动机是什么。 – the8472
sleep是静态的,因为它只在当前运行的线程上调用它才有意义。当您查看Thread的源代码时,可以看到像sleep和wait这样的方法是本地方法。情况就是这样,因为os处理线程(如果它们是本地的,它们在java中)。所以基本上如果oyu调用中断,java会将该中断重定向到os,然后os会唤醒线程,然后java抛出异常。 –
“本地方法”是什么意思?然而,我不明白的是,Thread.sleep如何理解哪个线程进入睡眠状态,以及如何提取这些信息。 – zer0uno