Interrupt方法结束线程

本文深入探讨Java中线程的中断机制,包括如何使用interrupt()方法在不同状态下中断线程,以及如何通过捕获InterruptedException异常和检查isInterrupted()状态来正确处理线程中断。同时,介绍了volatile关键字的可见性特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.1.5.3. Interrupt

方法结束线程使用interrupt()方法来中断线程有两种情况:

1. 线程处于阻塞状态:如使用了sleep,同步锁的wait,socket中的receiver,accept等方法时,会使线程处于阻塞状态。当调用线程的interrupt()方法时,会抛出InterruptException异常。阻塞中的那个方法抛出这个异常,通过代码捕获该异常,然后break跳出循环状态,从而让我们有机会结束这个线程的执行。通常很多人认为只要调用interrupt方法线程就会结束,实际上是错的, 一定要先捕获InterruptedException异常之后通过break来跳出循环,才能正常结束run方法。

2. 线程未处于阻塞状态:使用isInterrupted()判断线程的中断标志来退出循环。当使用interrupt()方法时,中断标志就会置true,和使用自定义的标志来控制循环是一样的道理。


public class ThreadSafe extends Thread {
     public void run() {
        while ( !isInterrupted() ){       //非阻塞过程中通过判断中断标志来退出
             try{
                  Thread.sleep(5*1000);//阻塞过程捕获中断异常来退出
              }catch(InterruptedException e){
                   e.printStackTrace();
                   break;//捕获到异常之后,执行break跳出循环
             }
       }
   }
}

说明:

1、以上是''Java核心知识点整理"一遍文章的内容,阅读了这段文字后,整理一下结论;

2、被volatile关键字修饰的变量,在一个线程中被修改后,其它线程立即可见,这叫volatile关键字的可见性;

3、当线程处于阻塞状态时,在其它线程中调用这个线程的interrupt()方法时,才会抛出InterruptException异常,同事一定要先捕获这个异常。

4、当线程处于非阻塞状态时,不抛出InterruptException异常,可以正常退出。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值