我想了解中断如何使用Thread.sleep()和Thread.join()。
例如,如果在线程(比如t1 )中,我执行Thread.sleep(),然后从另一个线程调用t1.interrupt(),然后Thread.sleep()抛出和InterruptException。
我想知道的是这一切的机制。正如我所看到的,sleep()是一种静态方法,它如何检测到一个中断被发送到调用它的线程?
类似于t1.join()的情况,该方法如何看到执行ti.join()的线程接收到中断、抛出和异常?有某种联系吗?
发布于 2015-10-16 18:09:35
我想了解中断如何使用Thread.sleep()和Thread.join()。
这件事太复杂了,无法详细解释。实现主要是在作为JVM代码库一部分的本机代码(即C++代码)中,以及在操作系统提供的本机线程支持中,等等。如果要读取源代码,则可用。
正如我所看到的,
sleep()是一种静态方法,它如何检测到一个中断被发送到调用它的线程?
静态方法委托给实现sleep行为的sleep方法。该本机方法很可能委托给操作系统提供的本机线程库(例如p线程)来查找当前线程.如果有必要的话。(这个>>is<<在Linux中发生了什么。)
中断也在本机方法中处理。在Linux上,Java native sleep方法调用pthread_sleep。当后者返回时,native sleep方法调用pthread_interrupted以确定pthread_sleep调用是否被中断,并在必要时抛出pthread_sleep异常。
“本土方法”是什么意思?
这些方法不是在Java代码中实现的。查看java.lang.Thread类的源代码,您将看到一些具有native修饰符的方法。这些都是本地的方法。
https://stackoverflow.com/questions/33174473
复制相似问题