首页 > java线程 > 线程的唤醒interrupt

线程的唤醒interrupt

作者:bin

sleep、wait的进程都可以被interrupt打断,以此可以避免死等待

public class Part5 {

    private final static String PREFIX = "MARK-";

    public static void main(String[] args) throws Exception{
        threadSleep();

    }


    /**
     * 线程的interrupt
     * @throws Exception
     */
    private static void threadSleep() throws Exception{
       Thread thread = new Thread(() -> {
            try {
                //推荐使用封装的TimeUnit方法
                System.out.println("线程开始sleep 1分钟");
                TimeUnit.MINUTES.sleep(1);
                System.out.println("被打断的话,sleep后面的不会执行了");
            }catch (Exception e) {
                System.out.println("线程被打断sleep,继续执行");
            }

        });

        //启动线程
        thread.start();

        //sleep 5 s
        TimeUnit.SECONDS.sleep(5);

        //打断线程
        thread.interrupt();
    }

}

interrupt不配被触发的情况,值得注意的是,如果非block情况,线程是不会被interrupt打断的。

Thread t1=new Thread(){
            @Override
            public void run(){
                while(true){
                    System.out.println("未被中断");
                }
            }
};
t1.start();
TimeUnit.SECONDS.sleep(2);
t1.interrupt();

通过改写如下代码,自行判断是否被打断,

while(true && !this.isInterrupted()){
   System.out.println("未被中断");
}

您必须 [ 登录 ] 才能发表留言!