请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,为什么我测试时,try/catch在while内外运行结果都一样呢?

public static void interrupt() throws InterruptedException {
    Runnable runnable = () ->{
        int num  = 0;
        while (num<=300){
            if(num%100==0){
                System.out.println(num+ "是100的倍数");
            }
            num++;
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    };
    Thread thread = new Thread(runnable);
    thread.start();
    Thread.sleep(500);
    thread.interrupt();
}
运行结果:
0是100的倍数

java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.exercise.unsafe.InterruptTest.lambda$interrupt$0(InterruptTest.java:18)
at java.lang.Thread.run(Thread.java:748)

正在回答 回答被采纳积分+3

2回答

cqnuhy 2022-03-19 09:52:59

什么原因?持续关注中

0 回复 有任何疑惑可以回复我~
悟空 2021-10-21 22:28:15

你现在这种写法,中断会被catch,然后while会继续运行的。

try/catch在while内外的逻辑是不一样的,如果catch住,那么就不会退出while

0 回复 有任何疑惑可以回复我~
  • 提问者 丨木頭丶吅 #1
    我现在这样写,运行结果是中断以后就退出来了,没有继续运行,跟您讲的不一样,这是为什么呢?
    回复 有任何疑惑可以回复我~ 2021-10-26 10:13:05
  • 悟空 回复 提问者 丨木頭丶吅 #2
    是继续运行了但是不容易看出来,你把300改大试试
    回复 有任何疑惑可以回复我~ 2021-10-26 10:16:22
  • 提问者 丨木頭丶吅 回复 悟空 #3
    我改成了5000,还是没有继续运行,继续运行的话,会打印出来,但是程序直接就退出来了。我是建的springboot项目,然后再测试类里测试的,这个应该不会有影响吧。
    2021-10-26 10:23:20.674  INFO 11532 --- [           main] c.e.unsafe.UnsafeApplicationTests        : Starting UnsafeApplicationTests using Java 1.8.0_261 on DESKTOP-4S4UQMS with PID 11532 (started by zlf in D:\JavaCode\unsafe)
    2021-10-26 10:23:20.678  INFO 11532 --- [           main] c.e.unsafe.UnsafeApplicationTests        : No active profile set, falling back to default profiles: default
    2021-10-26 10:23:21.619  INFO 11532 --- [           main] c.e.unsafe.UnsafeApplicationTests        : Started UnsafeApplicationTests in 1.338 seconds (JVM running for 2.831)
    
    0是100的倍数
    java.lang.InterruptedException: sleep interrupted
    	at java.lang.Thread.sleep(Native Method)
    	at com.exercise.unsafe.InterruptTest.lambda$interrupt$0(InterruptTest.java:18)
    	at java.lang.Thread.run(Thread.java:748)
    
    
    Process finished with exit code 0
    回复 有任何疑惑可以回复我~ 2021-10-26 10:30:10
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信