gpt4 book ai didi

java - 我在sleep()时中断了方法并且没有异常

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

Here说, sleep 处于 Activity 状态时,另一个线程中断该线程时,sleep()会引发InterruptedException。那么,为什么我在那里有一个无限循环而没有InterruptedException呢?

public class Test
{
public static void main(String[] args) throws InterruptedException
{
Test2 t2 = new Test2();
t2.start();
t2.sleep(1_000);
t2.interrupt();


}
}

class Test2 extends Thread
{
@Override
public void run()
{
while (true) {}
}
}

最佳答案

(至少)四个问题:

首先,您实际上并没有使t2进入休眠状态。 Thread.sleep是静态方法,因此t2.sleep(1_000)实际上实际上是Thread.sleep(1_000),因此您只是在制作the current thread sleep
(您能想象如果允许其他线程任意 sleep 会引起的困惑吗??)

其次,您实际上并没有在Test2中检查中断。因此,当您中断它时,没有人在听中断,所以什么也不会发生。
如果要检查中断,可以执行类似的操作

 while (!interrupted()) {}
但是即使这样也不会抛出 InterruptedException:循环只会停止执行。

第三, Test2确实在其 InterruptedException方法中抛出了 run(),它必须在该方法中进行处理。 InterruptedException是一个已检查的异常,因此您不能在其签名中添加 throws InterruptedException,因为 run()不会声明它会引发任何已检查的异常。这样,它将永远不会“逃脱”该方法。

第四,即使您确实设法使 InterruptedException逃脱了 Thread.run()方法(这样做的方法也很狡猾和卑鄙),但这并不意味着它可以在主线程中捕获。异常将由未捕获的异常处理程序处理,并且主线程将继续继续执行。

关于java - 我在sleep()时中断了方法并且没有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65235492/

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