【独家揭秘】Thread interrupt()、isInterrupted()、interrupted(),让你一窥线程中断的秘密!

VIP分享内容直达

2024最全大厂面试题无需C币点我下载或者在网页打开全套面试题已打包

AI绘画关于SD,MJ,GPT,SDXL百科全书

引言:
在Java多线程编程的世界里,线程中断是一种常见的操作。Java提供了三种方法来处理线程中断:interrupt()、isInterrupted()和interrupted()。那么,它们之间有什么区别和含义呢?本文将为你揭开这个谜团。
一、Thread interrupt()方法
Thread类的interrupt()方法用于中断一个线程。当调用一个线程的interrupt()方法时,该线程的中断状态将被设置为true。如果该线程由于调用了wait()、join()或sleep()方法而处于阻塞状态,那么它将收到一个InterruptedException异常。
示例代码:

public class InterruptExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                System.out.println("线程被中断");
            }
        });
        thread.start();
        thread.interrupt();
    }
}

在上面的代码中,我们创建了一个线程,并在其中调用sleep()方法使线程进入阻塞状态。然后,我们在主线程中调用interrupt()方法来中断该线程。由于线程处于阻塞状态,它将收到一个InterruptedException异常,并输出"线程被中断"。
二、Thread isInterrupted()方法
Thread类的isInterrupted()方法用于检查一个线程的中断状态。当一个线程被中断时,它的中断状态将被设置为true。isInterrupted()方法返回该线程的中断状态。
示例代码:

public class IsInterruptedExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                // 执行任务
            }
            System.out.println("线程中断状态:" + Thread.currentThread().isInterrupted());
        });
        thread.start();
        thread.interrupt();
    }
}

在上面的代码中,我们创建了一个线程,并在其中使用一个while循环来检查线程的中断状态。当线程的中断状态为true时,循环结束,并输出"线程中断状态:true"。
三、Thread interrupted()方法
Thread类的静态方法interrupted()用于检查当前线程的中断状态。与isInterrupted()方法不同的是,interrupted()方法是一个静态方法,它返回当前线程的中断状态,并清除该状态。
示例代码:

public class InterruptedExample {
    public static void main(String[] args) {
        Thread thread = Thread.currentThread();
        thread.interrupt();
        System.out.println("当前线程中断状态:" + Thread.interrupted());
        System.out.println("当前线程中断状态:" + Thread.interrupted());
    }
}

在上面的代码中,我们调用interrupted()方法来检查当前线程的中断状态。第一次调用时,它返回true,并清除中断状态。第二次调用时,它返回false,因为中断状态已经被清除了。
四、总结
本文详细介绍了Thread类的interrupt()、isInterrupted()和interrupted()方法。通过示例代码,我们了解了它们之间的区别和含义。

  • interrupt()方法用于中断一个线程,将其中断状态设置为true。
  • isInterrupted()方法用于检查一个线程的中断状态,返回该线程的中断状态。
  • interrupted()方法用于检查当前线程的中断状态,返回当前线程的中断状态,并清除该状态。
    掌握这些方法的使用,可以帮助我们更好地管理和控制线程,实现优雅的多线程编程。
    如果你觉得这篇文章对你有帮助,不要忘记点赞和评论哦!你的支持是我最大的动力!如果有任何疑问或者建议,也欢迎在评论区留言,我会尽力为大家解答。让我们一起学习,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值