9.0、Java多线程——线程停止

本文介绍了Java线程的生命周期,并探讨了如何安全地停止线程。不推荐使用已废弃的stop()和destroy()方法,而是推荐通过设置标志位来控制线程的停止。示例代码展示了一个利用布尔标志变量停止子线程的实例,当主线程改变标志位时,子线程会优雅地结束执行。
摘要由CSDN通过智能技术生成

9.0、Java多线程——线程停止

先来看一张简单的线程状态:

再来看一张详细的线程状态图:

总结一下 :

1、当我们线程对象被创建的时候线程就已经来到了 新生状态

2、当我们调用 start() 方法的时候 线程就会进入 就绪状态 以便等待CPU的调度

3、当线程被CPU调度执行的时候将进入 运行状态

4、当运行状态的线程遇到 sleep 、 wait 或者 同步锁 的时候进入 阻塞状态,然后等待阻塞时间解除后重新进入就绪状态等待CPU的调度

5、线程执行结束后就会进入 死亡状态 就不会再启动了

停止线程:

        不推荐使用JDK提供的stop()、destory()方法。【已废弃使用】

        推荐线程自己停下来

        建议使用一个表示为进行终止变量,当flag=false,则终止线程运行

接下来用代码来实现一下利用 flag标志位 停止 子线程:

package com.hkl.state;

//测试stop
//1.建议线程正常停止--->利用次数,不建议死循环
//2.建议视同标志位--->设置一个标志位
//3.不要使用stop或者destroy等过时或者JDK不建议使用的方法
public class TestStop implements Runnable{

    //1.设置一个标识位
    private Boolean flag = true;

    @Override
    public void run() {
        int i =0;
        while(flag) {
            System.out.println("run...执行->"+i++);
        }
    }
    //2.设置一个公开的方法停止线程,转换标志位
    public void stop() {
        this.flag = false;
    }
    public static void main(String[] args) {
        TestStop testStop = new TestStop();
        new Thread(testStop).start();

        for(int i=0;i<=1000;i++) {
            System.out.println("main主线程调用执行"+i);
            if(i==900) {
                //调用stop方法切换标志位,让线程停止
                testStop.stop();
                System.out.println("子线程已停止");
            }
        }
    }
}

可以看到运行结果如下: 

        主线程和子线程在同时进行,当主线程到900的时候,使用 flag标志位停止了子线程的执行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值