多线程——如何停止线程(三种方式)

本文介绍了在Java中停止线程的三种方法:1) 使用退出标识,让线程在run方法完成后自然退出;2) 不推荐使用已过期的stop方法,因为它可能导致数据不同步问题;3) 使用interrupt方法,配合interrupted/isinterrupted方法或抛异常、return,以优雅地结束线程。特别强调了在线程阻塞状态下,如何通过interrupt方法唤醒并终止线程。
摘要由CSDN通过智能技术生成

方式一

使用退出标识,使得线程正常退出,即当run方法完成后进程终止。

private int tickeys=10;

    private boolean flag=true;

    @Override
    public void run() {
   
        while (flag){
   
            try {
   
                buyTickey();
            } catch (InterruptedException e) {
   
                e.printStackTrace();
            }
        }
    }

    private void buyTickey() throws InterruptedException {
   
        if(tickeys<=0){
   
            flag=false;
            return;
        }

利用标识符flag判定线程是否继续执行。

方式二

使用stop强行中断线程(此方法为作废过期方法),不推荐使用,暴力终止,可能使一些清理性的工作得不到完成。还可能对锁定的内容进行解锁,容易造成数据不同步的问题。

方式三

使用interrupt方法中断线程
既然 stop() 方法如此粗暴,不建议使用,我们如何优雅地结束线程呢?

线程只有从 runnable 状态(可运行/运行状态) 才能进入terminated 状态(终止状态),如果线程处于 blocked、waiting、timed_waiting 状态(休眠状态),就需要通过 Thread 类的 interrupt() 方法,让线程从休眠状态进入 runnable 状态,从而结束线程。

  • 组合使用interrupt方法与interruptted/isinterrupted方法终止正在运行的线程 + 抛异常法/Return法
    线程停止——抛异常法
public class MyThread4 extends Thread {
   
    @Override
    public void run() {
   
        super.run();
        for (int i = 0; i < 50000
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值