java线程完美中断,排除网上经典错误中断线程

本文探讨了Java线程的中断机制,强调`interrupt()`方法并不直接停止线程,而是设置中断标识。当线程处于可中断的阻塞状态时,会抛出`InterruptedException`。介绍两种有效中断线程的方法:通过异常传递和恢复中断。警告使用volatile变量作为中断标识的潜在问题,尤其是在阻塞操作中。建议使用`isInterrupted()`周期性检查中断状态。
摘要由CSDN通过智能技术生成
interrupt()

interrupt()不会中断一个正在运行的线程,而是设置中断标识,然后交给应用程序,有应用程序判断怎么处理

如果该线程阻塞的调用wait() , wait(long) ,或wait(long, int)的方法Object类,或者在join() , join(long) , join(long, int) , sleep(long) ,或sleep(long, int) ,这个类的方法,那么它的中断状态将被清除,并且将收到一个InterruptedException 。

上面简单讲就是,线程阻塞时,上面的可中断的阻塞方法会不断检查自己的中断状态,如果有interrupt来了,就马上抛出一个InterruptedException,同时清除中断标识。 为了提前结束自己的阻塞状态。

如何中断线程呢?
两种完美方法:

1 传递中断。

子函数抛出中断异常,不要吞掉异常。

2 恢复中断。

在不能传递或者不想中断,在try…catch中 恢复中断。

public class RightWayStopThreadPro implements Runnable{
   
    @Override
    public void run() {
   

        while (true && !Thread.currentThread().isInterrupted()){
   
            System.out.println("niu bi");
            try {
   
                throwMethod();
            } catch (InterruptedException e) {
   
                System.out.println("执行中断前操作。。。");
                System.out.println("打印日志。。。");
                e.printStackTrace();
                // break;
                Thread.currentThread().interrupt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值