如何正确停止Java线程,终止Java线程的三种方法

本文探讨了在Java中停止线程的三种方法:退出标志、弃用的stop方法以及推荐的interrupt方法。重点讲解了为何stop方法不安全,以及如何使用interrupt方法中断等待的线程。建议使用线程状态控制来安全地停止线程。
摘要由CSDN通过智能技术生成

如何正确停止Java线程,终止Java线程的三种方法

【原创,转载请注明出处】
我的 【博客园主页】 【CSDN主页】 【简书主页】
加V进Java交流群,备注Java交流:w1129574379

在 Java 中有以下 3 种方法可以终止正在运行的线程:

  1. 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止。
  2. 使用 stop() 方法强行终止线程,但不推荐,该方法已被弃用,原因见后文。
  3. 使用 interrupt 方法中断线程。

以下内容翻译自 JDK1.5官方文档 ,内容有微调。未发现JDK1.8对应文档与JDK1.5的内容有明显不同。

停止一个线程的推荐做法

stop的大多数用法应由简单地修改某些变量以指示目标线程应停止运行的代码代替。 目标线程应定期检查此变量,如果该变量指示要停止运行,则应有序地从其运行方法返回。 (这是Java始终推荐的方法)。为了确保对stop-request进行及时的通信,变量必须是volatile(或必须同步访问变量)

例如,假设您的程序包含以下startstoprun方法:

    private Thread blinker;

    public void start() {
   
        blinker = new Thread(this);
        blinker.start();
    }

    public void stop() {
   
        blinker.stop();  // UNSAFE!
    }

    public void run() {
   
        Thread thisThread = Thread.currentThread();
        while (true) {
   
            try {
   
                thisThread.sleep(interval);
            } catch (InterruptedException e){
   
            }
            repaint();
        }
    }

可以通过将程序的stop和run方法替换为下面的代码来避免使用Thread.stop

    private volatile Thread blinker;

    public void stop() {
   
        blinker = null;
    }

    public
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值