如何中断和Thread.sleep()/ Thread.join()行为

时间:2015-10-16 15:41:33

标签: java multithreading

我想了解中断如何与Thread.sleep()和Thread.join()一起使用。

例如,如果在一个线程中,比如t1,我执行Thread.sleep(),然后从另一个线程调用t1.interrupt(),然后Thread.sleep()抛出和InterruptException。

我想知道的是所有这一切的机制。我看到sleep()是一个静态方法,它怎么能检测到中断被发送到调用它的线程?

类似于t1.join()的情况,该方法如何看到执行ti.join()的线程已收到中断并抛出异常?是否存在某种联系?

1 个答案:

答案 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修饰符的方法。这些都是本土方法。