如何正确的更好的停止一个线程?

本文介绍了一种通过在Runnable接口实现类中定义一个布尔型变量来优雅地停止线程的方法,并给出了具体的实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面提到过三种停止线程的方式,这三种方式不是被废弃就是可能造成return污染,最后虽然建议用抛异常法,但抛异常法依靠的是异常处理机制,下面介绍一种更常用的的停止线程的方法:通过在实现Runnable接口的类里面(或者是在继承Thread类的类里面)定义一个boolean类型的变量(标记),然后对变量(标记)进行判断处理,从而达到停止线程的目的。
下面是简单示例:


/*
 * 如何正常终止一个线程?
 * 需求:线程启动5s之后停止
 */
public class Test {

    public static void main(String[] args) throws InterruptedException {
        MyRunnable myRunnable = new MyRunnable();
        Thread t1 = new Thread(myRunnable);
        //设置线程的名称为t1
        t1.setName("t1");
        t1.start();
        // 5s之后
        Thread.sleep(5000);
        // 通过置boolean类型的变量isRun的值为false使线程终止
        myRunnable.isRun = false;

    }
}

/*
 * 通过在实现Runnable接口的类里面(或者是在继承Thread类的类里面)定义一个boolean类型的变量,然后对变量进行判断处理,
 * 从而达到停止线程的目的
 */
class MyRunnable implements Runnable {
    // 定义一个boolean类型的变量,初始值为true
    boolean isRun = true;
    // 实现接口中的run方法
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            // 判断如果为真,正常执行,否则return
            if (isRun) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    System.out.println(Thread.currentThread().getName() + "---->" + i);
            } else {
                return;
            }
        }
    }
}

运行结果如图所示:
这里写图片描述

运行结果图
由图可知,线程启动5s后成功停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值