请问老师为什么在子线程中,开始休眠阻塞,sleep是失效的,放在while循环里面是可以阻塞生效的?

来源:5-4 遇到阻塞

慕莱坞8435019

2019-12-23

public class RightWayStopThreadWithoutSleep implements Runnable {
   @Override
   public void run() {
       try {
           System.out.println(Thread.currentThread().getName());
           Thread.sleep(100000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
       int num = 0;
       //状态已经没有更改,并且是满足条件
       while (!Thread.currentThread().isInterrupted() && num <= Integer.MAX_VALUE / 2) {
           if (num % 10000 == 0) {
               System.out.println(num + "是1w的倍数");
           }
           num++;
       }
       System.out.println("结束执行");
   }

   public static void main(String[] args) throws InterruptedException {
       System.out.println(Thread.currentThread().getName());
       Thread thread = new Thread(new RightWayStopThreadWithoutSleep());
       thread.start();
       //让线程执行1秒,然后在更改状态
       Thread.sleep(1000);
       thread.interrupt();
   }
}


请问老师为什么在子线程中,开始休眠阻塞,sleep是失效的,放在while循环里面是可以阻塞生效的?

写回答

1回答

悟空

2019-12-23

开始也是生效的,只不过中断以后,跳出sleep了

0
9
悟空
回复
慕莱坞8435019
不客气
2019-12-25
共9条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程