Java 线程的停止

使用退出标志位来终止线程

使用一个变量来控制循环,每次循环时都判断该变量的值

使用 interrupt 方法停止

线程非阻塞状态,直接调用 intercept 会将中断标志位置为 true ,再循环是使用 isInterrupted 方法获取该标志位,如果为 true 则结束循环。

线程在阻塞状态时,调用 interrupt 函数会抛出 InterruptedException ,需要捕获该异常,并在异常中 break 跳出循环。抛出异常时会把中断标志位的 true 置为 false,所以不能使用 isIntercepted 来判断,需要在异常中跳出。

使用时阻塞非阻塞要同时考虑

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

使用 stop 方法

该方法是强制终止,会释放该线程持有的所有锁,破坏数据,所以不推荐使用这种方式

推荐阅读更多精彩内容