Java多线程-打断(interrupt)

package com.che.thread.interrupt;

/**
 * @author cheyuhang on 2021/12/22
 * 如果一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait、1.5中的condition.await、
 * 以及可中断的通道上的 I/O 操作方法后可进入阻塞状态)
 *
 * 注意线程使用join方法时,阻塞的不是调用方,而是另一方,因此使用interrupt进行打断阻塞线程时,应是另一方调用interrupt方法
 */
public class ThreadInterrupt {
    public static void main(String[] args) throws InterruptedException {

        Thread thread = new Thread(() -> {
            while (true) {
                System.out.println("aa");
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    System.out.println("线程被打断了");
                    e.printStackTrace();
                }
            }

        });
        thread.start();
        thread.interrupt();  //其作用是中断阻塞的线程,如果异常被捕获的话,线程仍会继续运行,否则线程就退出了。
        System.out.println("第一次调用thread.isInterrupted():"+thread.isInterrupted());//作用是只测试调用方法的线程是否被中断 ,不清除中断状态。
        System.out.println("第二次调用thread.isInterrupted():"+thread.isInterrupted());
        System.out.println("第一次调用thread.interrupted():"+Thread.interrupted());   //看源码可知作用是测试当前线程(此处是main线程)是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。
        System.out.println("第二次调用thread.interrupted():"+Thread.interrupted());


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值