最近刚开始学线程。

任务

使用sleep,interrupt实现


import org.apache.log4j.Logger;
import static java.lang.Thread.sleep;
public class Demo{public static void  main(String[] agrs) throws InterruptedException {TwoPhaseTerminate pt=new TwoPhaseTerminate();pt.start();//分给monitor线程时间片后,monitor开始运行。//此时main和monitor线程并行Thread.sleep(5000);//main线程睡眠5s,monitor还在运行pt.stop();//main睡眠结束,调用结束方法。线程monitor结束}
}
class TwoPhaseTerminate{private static Logger logger = Logger.getLogger(TwoPhaseTerminate.class);private Thread monitor;public void start(){monitor=new Thread(()->{while(true){Thread current= Thread.currentThread();if(current.isInterrupted()){logger.debug("退出监控");break;}try {Thread.sleep(2000);//state 1:这里打断,打断标记会被清除logger.debug("监控中");//state 2:在这里打断没事。} catch (InterruptedException e) {e.printStackTrace();current.interrupt();//鉴于state 1,在睡眠时打断,标记会被清除//所以可以在打断一次。这样打断标记就是true//没有这一句的话,线程会一直运行下去。(不考虑main线程的睡眠时间,//因为可能刚好在state 2 打断。}}},"monitor");monitor.start();//main线程调用}public void stop(){monitor.interrupt();}
}

结果如下

Java线程-两阶段终止模式(interrupted实现)相关推荐

  1. Java多线程基础学习,Thread解读、java线程的状态、同步和异步、两阶段终止模式

    理论概述 单线程和多线程 为什么要使用多线程呢?多线程有什么好处呢? 如果在程序中,需要读写一个文件,该文件很大,那我们执行到该io操作时,cpu就会等待该io操作执行完才会继续运行下面的代码,进程调 ...

  2. 多线程编程之两阶段终止模式

    2019独角兽企业重金招聘Python工程师标准>>> 对于多线程编程,如何优雅的终止子线程,始终是一个值得考究的问题.如果直接终止线程,可能会产生三个问题: 子线程当前执行的任务可 ...

  3. 终止模式之两阶段终止模式

    终止模式之两阶段终止模式 在一个线程 T1 中如何 "优雅" 终止线程 T2 ? 1. 利用 isInterrupted class TwoPhaseTermination {pr ...

  4. Java线程实现生产者—消费者模式

    在这里插入代码片# Java 线程实现生产者-消费者模式 ##思路:实现类似消费者生产者线程之间通讯的功能,每创建一个工人,就让这个工人干活,干一段时间,工人自动消失,然后又去创建一个工人干活: 代码 ...

  5. java线程中断和终止线程运行

    ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...

  6. JAVA线程两种方法内存,JAVA线程基础回顾及内存模型(一)

    线程创建的两种方式 继承Thread类 class MyThread extends Thread{ ...... @Override public void run(){ ...... } } My ...

  7. Java线程实现生产者消费者模式

    1 什么是生产者消费者模式 想一个现实生活中的例子,啤酒商---超市---消费者也就是我们,啤酒商生产了啤酒,然后将啤酒销售给了超市,我们消费之又会到超市将啤酒买回来自己喝,那么啤酒商和消费者之间是什 ...

  8. java线程两个汽车赛跑,Java 多线程 通信 通道 (猫狗赛跑)

    package thread; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOut ...

  9. 黑马程序员并发编程笔记(二)--java线程基本操作和理解

    3.java进程的基本操作 3.1.创建进程 方法一,直接使用 Thread // 构造方法的参数是给线程指定名字,,推荐给线程起个名字(用setName()也可以) Thread t1 = new ...

最新文章

  1. 初中数学分几个模块_初中数学 8大模块,59个必考易错知识点大集合,期末考试一定要注意...
  2. rop的noejs客户端
  3. eclipse默认编码为GBK,修改为UTF8的方法
  4. java 6 基础教程_Java小白入门教程(6)——循环语句
  5. 坦克大战 Java版
  6. Netty工作笔记0025---SocketChannel API
  7. 创建dataframe_Spark原理与实战(五) Spark核心数据抽象DataFrame
  8. 苏州大学计算机复试python_苏州大学计算机考研复试经验总结
  9. 数据可视化之美:桑基图的前世今生
  10. 如何使用报表工具制作条形码报表
  11. Arduino Nano 引脚分配图及定义详解
  12. 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  13. 智慧高速公路综合服务平台规划方案(附下载)
  14. 【Promise】入门-同步回调-异步回调-JS中的异常error处理-Promis的理解和使用-基本使用-链式调用-七个关键问题
  15. PMOS和NMOS的导通特性
  16. C语言中的多线程简介
  17. 防(反)浏览器指纹技术之指纹浏览器揭秘
  18. 山西阳泉中考计算机科目,2018阳泉中考科目及分值
  19. C语言large函数的作用,LARGE函数是什么
  20. vue创建色带组件。

热门文章

  1. 【OpenCV 4开发详解】可分离滤波
  2. 定义一个DSL风格的LifecycleObserver(Kotlin)
  3. Nginx HTTP负载均衡和反向代理配置
  4. oracle收购Mysql后,Mysql的安装配置方法
  5. Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
  6. Canvas基础知识
  7. php设计模式 - 建造者模式
  8. [CareerCup] 8.5 Online Book Reader System 在线读书系统
  9. mysql从入门到精通之数据库安装图解
  10. 工作事件五点作法和网络中所产生的Winsock连接与互动