gpt4 book ai didi

java - 中断和 Thread.sleep()/Thread.join() 如何起作用

转载 作者:行者123 更新时间:2023-12-01 11:03:14 29 4
gpt4 key购买 nike

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

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

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

类似案例t1.join() ,这个方法怎么看到执行ti.join()的线程已收到中断并抛出异常?有某种联系吗?

最佳答案

I would like to understand how interrupts work with Thread.sleep() and Thread.join().

太复杂了,无法详细解释。实现主要是在作为 JVM 代码库一部分的 native 代码(即 C++ 代码)中,以及由操作系统等提供的 native 线程支持中。如果想阅读,可以获取源代码。

As I see sleep() is a static method, how can it detect that an interrupt was sent to the thread which it was invoked from?

静态方法委托(delegate)给实现sleep 行为的native 方法。该 native 方法很可能会委托(delegate)给操作系统提供的 native 线程库(例如 pthreads)来找出当前线程......如果有必要的话。 (这>>就是<< Linux 情况下发生的情况。)

中断也在 native 方法中处理。在 Linux 上,Java native sleep 方法调用 pthread_sleep。当后者返回时,native sleep 方法调用 pthread_interrupted 来查明 pthread_sleep 调用是否被中断,并在必要时抛出 Java 异常。

What does "native methods" mean?

这些方法未在 Java 代码中实现。查看java.lang.Thread 类的源代码,您将看到一些具有native 修饰符的方法。这些是 native 方法。

关于java - 中断和 Thread.sleep()/Thread.join() 如何起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174473/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com