「美好,一直在身边」震惊!这样终止线程,竟然会导致服务宕机?( 四 )
1.自定义退出标识我们可以自定义一个布尔变量来标识是否需要退出线程 , 实现代码如下: // 自定义退出标识退出线程static class FlagThread extends Thread { public volatile boolean exit = false; public void run { while (!exit) { // 执行正常的业务逻辑 } } } 可以看出我们使用了关键字 volatile 对线程进行了修饰 , 这样就可以保证多线程的执行安全了 , 在我们需要让线程退出时 , 只需要把变量 exit 赋值为true 就可以了 。
2.interrupt 终止线程当我们使用 interrupt 方法时 , 以上两个示例的执行结果就正常了 , 执行代码如下: public class ThreadStopExample { public static void main(String[] args) throws InterruptedException { // 问题一:破坏了程序的完整性 Thread t1 = new Thread( -> { try { System.out.println("子线程开始执行"); // 模拟业务处理 Thread.sleep(1000); } catch (Exception e) { } // 伪代码:重要业务方法 System.out.println("子线程的重要业务方法"); }); t1.start; // 让子线程先运行一点业务 Thread.sleep(100); // 终止子线程 t1.interrupt; // 等待一段时间 , 确保子线程“执行完” Thread.sleep(3000); System.out.println("主线程执行完成"); // 问题二:破坏了原子逻辑 MyThread myThread = new MyThread; Thread t2 = new Thread(myThread); // 开启线程 t2.start; for (int i = 0; i < 10; i++) { Thread t = new Thread(myThread); t.start; } // 结束线程 t2.interrupt; } /** * 自定义原子测试线程 */ static class MyThread implements Runnable { // 计数器 int num = 0; @Override public void run { // 同步代码块 , 保证原子操作 synchronized (MyThread.class) { // 自增 num++; try { // 线程休眠 0.1 秒 Thread.sleep(100); } catch (InterruptedException e) { System.out.println(e.getMessage); } // 自减 num--; System.out.println(Thread.currentThread.getName + " | num=" + num); } } }} 以上程序的执行结果为:
子线程开始执行
子线程的重要业务方法
主线程执行完成
sleep interrupted
Thread-1 | num=0
Thread-9 | num=0
Thread-10 | num=0
Thread-7 | num=0
Thread-6 | num=0
Thread-5 | num=0
Thread-4 | num=0
Thread-2 | num=0
Thread-3 | num=0
Thread-11 | num=0
Thread-8 | num=0
可以看出以上的执行都符合我们的预期 , 这才是正确的终止线程的方式 。
推荐阅读
- @选择一款5G手机,回到美好生活,天猫“418”大促正是个好时机!
- 【美好,一直在身边】加快工业互联网与制造业融合,遂宁开启工业互联网时代→
- 『美好,一直在身边』新能源新项目!长虹控股投资近20亿元锂电池项目在绵阳开工
- 美好,一直在身边@微信小程序增加跨境电商服务类目
- 「美好,一直在身边」马鞍形 星空顶 杭州地铁5号线的这个入口很特别
- 美好,一直在身边@电子城转向新型科技服务业务显成效 科技服务收入占比持续增加
- 美好,一直在身边■购物社交平台首推“人品评级”,未来已来
- 『美好,一直在身边』37家公司市值超百亿,科创板造富效应显著,会一直火下去么?
- 『Google Play』一直说的订阅政策更新来了 6月16日是最后期限
- 美好,一直在身边■2020年第12批CDN牌照下发:全国CDN经营资质企业突破200家
