首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断和Thread.sleep()/Thread.join()是如何操作的

问中断和Thread.sleep()/Thread.join()是如何操作的
EN

Stack Overflow用户
提问于 2015-10-16 15:41:33
回答 1查看 318关注 0票数 0

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

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

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

类似于t1.join()的情况,该方法如何看到执行ti.join()的线程接收到中断、抛出和异常?有某种联系吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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修饰符的方法。这些都是本地的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33174473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档