随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

一、

对于多线程的启动一定是Thread类中的start()方法,而如果需要进行多线程的停止处理,Thread类原本提供了stop()方法,但是对于这个方法从JDK1.2开始就已经将其废除了,而除了stop()以外还有几个方法也被禁用了。

  - 停止多线程:  

  - 销毁多线程: 

  - 挂起线程(暂停执行): 

  - 恢复挂起的线程执行:

 

 

 之所以废除这些方法,是因为这些方法可能会导致死锁,所以从JDk1.2开始就都不建议使用了。

这个时候要想实现线程的停止就需要一种柔和的方式进行:

复制代码
package Demo_2_1_线程的停止;

public class Main {
    public static boolean flag = true;
    public static void main(String[] args) {
        new Thread(()->{
            long num = 1;
            while (flag){
                try {
                    Thread.sleep(500);   // 休眠500毫秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "、正在运行 " + num ++);
            }
        },"执行线程").start();
        try {
            Thread.sleep(200);  // 运行200 毫秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 因为线程已经通过了while的判断但是会延迟500毫秒,但是这个时候主线程在延迟200毫秒后就将flag的值改为了false,所以当500毫秒后子线程在执行了一次输出操作后,再进入判断时就通不过了。
        /*
        就好比两个人同时在劳作:
            主线程控制水龙头(while)来控制水的开关,子线程进行浇水操作,
            我们都知道开一次水龙头才能浇一次水,关闭就无法继续浇水,
       当整个工作启动的时候,第一次水龙头是打开的,判断通过, 此时水已经到达了水管内,然后在200毫秒后主线程关闭了水龙头, 虽然子线程等待了500毫秒才进行浇水,但是因为通过了判断,水管中是存在水的, 所以此时子线程仍然可以浇一次水,但是浇完水后水龙头是关闭的状态, 所以子线程无法继续浇水,就结束了浇水行为。
*/ flag = false; // 停止线程 } }
复制代码

 

posted on   时间完全不够用啊  阅读(144)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示