gpt4 book ai didi

java - 以下代码中主线程 sleep /中断的工作方式

转载 作者:行者123 更新时间:2023-12-03 13:14:22 25 4
gpt4 key购买 nike

第二个循环实际上如何中断正在 hibernate 的主线程,而第一个则不?
我的理解是在Thread.sleep(3000)之后,代码Thread.currentThread()。interrupt()将在3秒后执行。
谁能解释一下它实际上是如何工作的

for (int i = 0; i < 2; i++) {
try {
System.out.println("loop : " + i);
Thread.sleep(3000);
System.out.println("Woke up");
Thread.currentThread().interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
loop : 0
Woke up
loop : 1
java.lang.InterruptedException: sleep interrupted
exception loop:1
at java.base/java.lang.Thread.sleep(Native Method)
at multithreadings.Mainclass.main(Mainclass.java:13)

最佳答案

中断是有礼貌的停止请求:线程没有义务停止。

就像罗宾·威廉姆斯(Robin Williams)关于what police in the UK say when you commit a crime的笑话一样:

Stop! Or I'll say stop again!



同样,中断线程不会导致抛出 InterruptedException:它只是在线程上设置一个标志。如果某些东西(例如 Thread.sleep)检查了此标志并发现它已设置,则可能会抛出 InterruptedException;但是标志和异常是指示中断的两种正交方式。

因此:
  • 第一次执行时,您 sleep 3秒钟,然后设置中断标志,并且循环主体正常完成。
  • 在第二次执行时,您要求 sleep 3秒,但是Thread.sleep检测到中断的标志并引发异常。
  • 关于java - 以下代码中主线程 sleep /中断的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464818/

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