终止线程的方式

1、正常运行结束

2、使用退出标志退出

  使用java关键字:volatile

public class ThreadSafe extends Thread { 
    public volatile boolean exit = false;  
        public void run() {  
        while (!exit){ 
            //do something 
        } 
    }  
} 

  

3、Interrupt方法结束线程  

  线程未处于阻塞状态:使用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跳出循环 
            } 
        } 
    }  
}                

   线程处于阻塞状态:

    如使用了 sleep,同步锁的 wait,socket 中的 receiver,accept 等方法时, 会使线程处于阻塞状态。当调用线程的 interrupt()方法时,会抛出 InterruptException 异常。

    阻塞中的那个方法抛出这个异常,通过代码捕获该异常,然后 break 跳出循环状态,从而让 我们有机会结束这个线程的执行。

    通常很多人认为只要调用 interrupt 方法线程就会结束,实 际上是错的, 一定要先捕获InterruptedException异常之后通过break来跳出循环,才能正 常结束run方法

4、stop方法终止线程(不建议,容易造成“死锁”)

原文地址:https://www.cnblogs.com/2328322824chx/p/13610673.html