Java线程-两阶段终止模式(interrupted实现)
最近刚开始学线程。
任务
使用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实现)相关推荐
- Java多线程基础学习,Thread解读、java线程的状态、同步和异步、两阶段终止模式
理论概述 单线程和多线程 为什么要使用多线程呢?多线程有什么好处呢? 如果在程序中,需要读写一个文件,该文件很大,那我们执行到该io操作时,cpu就会等待该io操作执行完才会继续运行下面的代码,进程调 ...
- 多线程编程之两阶段终止模式
2019独角兽企业重金招聘Python工程师标准>>> 对于多线程编程,如何优雅的终止子线程,始终是一个值得考究的问题.如果直接终止线程,可能会产生三个问题: 子线程当前执行的任务可 ...
- 终止模式之两阶段终止模式
终止模式之两阶段终止模式 在一个线程 T1 中如何 "优雅" 终止线程 T2 ? 1. 利用 isInterrupted class TwoPhaseTermination {pr ...
- Java线程实现生产者—消费者模式
在这里插入代码片# Java 线程实现生产者-消费者模式 ##思路:实现类似消费者生产者线程之间通讯的功能,每创建一个工人,就让这个工人干活,干一段时间,工人自动消失,然后又去创建一个工人干活: 代码 ...
- java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...
- JAVA线程两种方法内存,JAVA线程基础回顾及内存模型(一)
线程创建的两种方式 继承Thread类 class MyThread extends Thread{ ...... @Override public void run(){ ...... } } My ...
- Java线程实现生产者消费者模式
1 什么是生产者消费者模式 想一个现实生活中的例子,啤酒商---超市---消费者也就是我们,啤酒商生产了啤酒,然后将啤酒销售给了超市,我们消费之又会到超市将啤酒买回来自己喝,那么啤酒商和消费者之间是什 ...
- java线程两个汽车赛跑,Java 多线程 通信 通道 (猫狗赛跑)
package thread; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOut ...
- 黑马程序员并发编程笔记(二)--java线程基本操作和理解
3.java进程的基本操作 3.1.创建进程 方法一,直接使用 Thread // 构造方法的参数是给线程指定名字,,推荐给线程起个名字(用setName()也可以) Thread t1 = new ...
最新文章
- 初中数学分几个模块_初中数学 8大模块,59个必考易错知识点大集合,期末考试一定要注意...
- rop的noejs客户端
- eclipse默认编码为GBK,修改为UTF8的方法
- java 6 基础教程_Java小白入门教程(6)——循环语句
- 坦克大战 Java版
- Netty工作笔记0025---SocketChannel API
- 创建dataframe_Spark原理与实战(五) Spark核心数据抽象DataFrame
- 苏州大学计算机复试python_苏州大学计算机考研复试经验总结
- 数据可视化之美:桑基图的前世今生
- 如何使用报表工具制作条形码报表
- Arduino Nano 引脚分配图及定义详解
- 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
- 智慧高速公路综合服务平台规划方案(附下载)
- 【Promise】入门-同步回调-异步回调-JS中的异常error处理-Promis的理解和使用-基本使用-链式调用-七个关键问题
- PMOS和NMOS的导通特性
- C语言中的多线程简介
- 防(反)浏览器指纹技术之指纹浏览器揭秘
- 山西阳泉中考计算机科目,2018阳泉中考科目及分值
- C语言large函数的作用,LARGE函数是什么
- vue创建色带组件。
热门文章
- 【OpenCV 4开发详解】可分离滤波
- 定义一个DSL风格的LifecycleObserver(Kotlin)
- Nginx HTTP负载均衡和反向代理配置
- oracle收购Mysql后,Mysql的安装配置方法
- Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
- Canvas基础知识
- php设计模式 - 建造者模式
- [CareerCup] 8.5 Online Book Reader System 在线读书系统
- mysql从入门到精通之数据库安装图解
- 工作事件五点作法和网络中所产生的Winsock连接与互动