Java并发编程系列-02-线程的中断

线程中断的概念
  • Java中线程中断是一种协作机制
  • 通过中断并不能直接终止线程的运行
  • 需要被中断的线程自己处理中断
  • 每个线程有一个boolean类型的标志位,代表线程是否中断
线程中断相关方法
  • public void interrupt();将调用该方法的对象所表示的线程标记一个停止标记,并不是真的停止该线程。
  • public static boolean interrupted();测试当前线程是否已经中断。线程的中断状态由该方法清除。
  • public boolean isInterrupted();测试线程是否已经中断。线程的中断状态不受该方法的影响。
/**
 * @description: 线程的中断
 * @author: Cyril
 * @create: 2019/11/04
 */
public class InterruptDemo {
    public static void main(String[] args) {
        // 线程是否被中断
        System.out.println("1: " + Thread.interrupted());
        // 设置线程中断,将调用该方法的对象所表示的线程标记一个停止标记,并不是真的停止该线程。
        Thread.currentThread().interrupt();
        // 线程是否被中断,静态方法interrupted()会将当前线程的中断状态清除。
        System.out.println("2: " + Thread.interrupted());
        // 线程是否被中断,如果连续两次调用该方法,则第二次调用将返回 false。
        System.out.println("3: " + Thread.interrupted());
    }
}
/**
 * @description: 判断线程是否中断,不清除中断状态
 * @author: Cyril
 * @create: 2019/11/04
 */
public class IsInterruptedDemo {
    public static void main(String[] args) {
        // 当前线程
        Thread thread = Thread.currentThread();
        // 当前线程是否被中断 false
        System.out.println("1: " + thread.isInterrupted());
        // 设置线程中断标识
        thread.interrupt();
        // 判断线程是否被中断 true
        System.out.println("2: " + thread.isInterrupted());
        // 判断线程是否被中断 true
        System.out.println("3: " + thread.isInterrupted());
        try {
            // 线程休眠
            Thread.sleep(2000);
            System.out.println("not interrupted...");
        } catch (Exception e) {
            System.out.println("Thread.sleep interrupted...");
            // 判断线程是否被中断 false
            // 为什么为false呢?因为调用Thread.sleep(2000)时,线程已经中断,这时相当于重新响应线程,所以为false;
            System.out.println("4: " + thread.isInterrupted());
            //如果捕获了异常,异常交给上层处理,需要重新设置中断异常标识位
            Thread.currentThread().interrupt();
        }
        // 判断线程是否被中断
        System.out.println("5: " + thread.isInterrupted());
    }
}
常见误区

被中断的线程将立刻退出运行,这句话是错误的,好比杀毒软件正在杀毒时,我们点击取消按钮,杀毒就会立即停止吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值