一、
对于多线程的启动一定是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; // 停止线程 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)