如何正确地停止一个线程
方法如下:
使用退出标志,使线程正常退出,也就是当 run 方法完成后线程终止
使用 interrupt 方法中断线程
退出标志法:
需要 while() 循环在某以特定条件下退出,最直接的办法就是设一个 boolean 标志,并通过设置这个标志来控制循环是否退出:
需要注意的是:isCancelled 需要为 volatile,保证线程读取时 isCancelled 是最新数据
interrupt法终止:
如果线程是阻塞的,则不能使用退出标志法来终止线程。这时就只能使用 Java 提供的中断机制:
void interrupt()无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!很多干货和技术资料分享!有导师分享知识点,也可以直接问,每天学习的都不一样,推荐一个学JAVA的技术分享裙【 一三三,九三零,六九三】,裙内有开发工具,视频,系列资料等
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!很多干货和技术资料分享!有导师分享知识点,也可以直接问,每天学习的都不一样,推荐一个学JAVA的技术分享裙【 一三三,九三零,六九三】,裙内有开发工具,视频,系列资料等如果线程处于被阻塞状态,那么线程将立即退出被阻塞状态,并抛出一个 InterruptedException 异常
如果线程处于正常活动状态,那么该线程的中断标志为 true。
static boolean interrupted()
测试当前线程是否被中断。这一调用会将当前线程的中断状态重置为 false
boolean isInterrupted()
测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态
终止 实例代码
以上代码运行输出结果为:
网友评论