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 方法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容