我想了解中断如何与Thread.sleep()和Thread.join()一起使用。
例如,如果在一个线程中,比如t1
,我执行Thread.sleep()
,然后从另一个线程调用t1.interrupt()
,然后Thread.sleep()
抛出和InterruptException。
我想知道的是所有这一切的机制。我看到sleep()
是一个静态方法,它怎么能检测到中断被发送到调用它的线程?
类似于t1.join()
的情况,该方法如何看到执行ti.join()
的线程已收到中断并抛出异常?是否存在某种联系?
答案 0 :(得分:1)
我想了解中断如何与Thread.sleep()和Thread.join()一起使用。
详细解释太复杂了。该实现主要在本机代码(即C ++代码)中,该代码是JVM代码库的一部分,并且在OS等提供的本机线程支持中。如果想要阅读它,可以使用源代码。
我看到
sleep()
是一个静态方法,它如何检测到一个中断被发送到调用它的线程?
静态方法委托实现native
行为的sleep
方法。该本机方法很可能委托给OS提供的本机线程库(例如pthreads)来找出当前线程......如果有必要的话。 (这>><<<<<<<<<<<<<<<<
中断也在本机方法中处理。在Linux上,Java native sleep
方法调用pthread_sleep
。当后者返回时,native sleep
方法调用pthread_interrupted
以查明pthread_sleep
调用是否被中断,并在必要时抛出Java异常。
"原生方法"意思?
这些是Java代码中未实现的方法。查看java.lang.Thread
类的源代码,您将看到一些具有native
修饰符的方法。这些都是本土方法。