java 终止线程的4种方式小结
终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法。即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行。比如设置一个标志来控制循环是否执行,通过这种方式让线程离开run()方法。
一、使用布尔标志位
在线程的执行代码中,使用一个布尔类型的标志位来标识线程是否需要终止。线程在执行过程中,不断地检查这个标志位,如果标志位为true,则主动退出线程执行的循环或方法,从而终止线程的执行。
public class MyThread implements Runnable {
private volatile boolean flag = true;
public void run() {
while (flag) {
// 执行线程任务
}
}
public void stopThread() {
flag = false;
}
}二、使用interrupt()方法
每个线程对象都有一个interrupt()方法。通过调用该方法,可以将线程的中断状态设置为"中断"。在线程的执行代码中,在适当的位置使用Thread.currentThread().isInterrupted()方法来检查线程的中断状态,并在必要时终止线程的执行
public class MyThread extends Thread {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
// 执行线程任务
}
}
public void stopThread() {
interrupt();
}
}三、使用stop()方法(已过时)
Thread类提供了stop()方法,可以立即终止线程的执行。但是该方法已过时,不推荐使用。因为stop()方法可能导致线程不会释放占用的锁资源,从而引发线程安全问题。
public class MyThread extends Thread {
public void run() {
while (true) {
// 执行线程任务
}
}
public void stopThread() {
stop();
}
}四、使用Thread.interrupt()方法配合isInterrupted()方法
线程的interrupt()方法会将线程的中断状态设置为"中断"。在线程的执行代码中,可以使用Thread.currentThread().isInterrupted()方法检查线程的中断状态,并在必要时终止线程执行。与方式2相比,这种方式更加灵活,可以处理更复杂的线程终止逻辑。
public class MyThread extends Thread {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
// 执行线程任务
// 可能会有一些阻塞操作,如Thread.sleep()等
} catch (InterruptedException e) {
// 捕获InterruptedException异常,清除中断状态
Thread.currentThread().interrupt();
}
}
}
public void stopThread() {
interrupt();
}
}到此这篇关于java 终止线程的4种方式小结的文章就介绍到这了,更多相关java 终止线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Java+Selenium实现保存网站登录数据的详细指南
在使用 Selenium 进行自动化测试时,频繁地手动登录网站可能会非常耗时,为了提高效率,我们可以采取一些措施来保存网站的登录数据,本文将详细介绍两种常见的方法,需要的朋友可以参考下2025-08-08
springboot项目中jackson-序列化-处理 NULL教程
这篇文章主要介绍了springboot项目中jackson-序列化-处理 NULL教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-10-10
logback的isDebugEnabled日志配置级别源码解析
这篇文章主要为大家介绍了logback的isDebugEnabled日志配置级别源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-11-11


最新评论