6.多线程学习--守护线程的创建和运行
来源:互联网 发布:淘宝哪家香水是正品 编辑:程序博客网 时间:2024/06/07 12:34
package com.jackson.deng.concurrent.chapter1.six;import java.util.ArrayDeque;import java.util.Date;import java.util.Deque;import java.util.concurrent.TimeUnit;/** * title : 守护线程的创建和运行 * desc : 模拟一个写任务进程和清除任务进程(守护线程,也是后台线程) * process desc: * 3个写任务进程负责到每隔1秒向双向队列deque的添加数据最前面 * 清理进程从开始运行的当前时间-写进程写到deque的进程时间>10秒,就把deque从后面进行移除 * @author jackson * */public class DaemonCreateAndRunnable {/** * 写任务进程 */public class WriterTask implements Runnable {//双向队列private Deque<Event> deque;public WriterTask(Deque<Event> deque) {this.deque = deque;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {Event event = new Event();event.setDate(new Date(System.currentTimeMillis()));event.setEvent("The thread " + Thread.currentThread().getId() + "generator a event;");deque.addFirst(event);try {TimeUnit.SECONDS.sleep(1);} catch (Exception e) {e.printStackTrace();}}}}public class CleanerTask extends Thread {private Deque<Event> deque;public CleanerTask(Deque<Event> deque) {this.deque = deque;setDaemon(true);//设置CleanerTask为守护线程}@Overridepublic void run() {while (true) {Date date = new Date(System.currentTimeMillis());clean(date);}}/** * 守护线程cleaner运行后的10秒移除新增加到deque中的event */private void clean(Date date) {if (deque.size() <= 0) {return;}long difference = 0l;boolean delete = false;while (true) {Event e = deque.getLast();difference = date.getTime() - e.getDate().getTime();if (difference > 10000) {System.out.println("Cleaner : " + e.getEvent());deque.removeLast();delete = true;} else {break;}}if (delete) {System.out.println("Deque : size of the thread is " + deque.size());}}}public static void main(String[] args) {DaemonCreateAndRunnable dcr = new DaemonCreateAndRunnable();Deque<Event> deque = new ArrayDeque<Event>();for (int i = 0; i < 3; i++) {Thread t = new Thread(dcr.new WriterTask(deque));t.start();}Thread clean = dcr.new CleanerTask(deque);clean.start();}}class Event {private Date date;private String event;public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public String getEvent() {return event;}public void setEvent(String event) {this.event = event;}}
运行结果:
Cleaner : The thread 9generator a event;
Cleaner : The thread 10generator a event;
Deque : size of the thread is 27
Cleaner : The thread 8generator a event;
Cleaner : The thread 10generator a event;
Cleaner : The thread 9generator a event;
Deque : size of the thread is 27
Cleaner : The thread 10generator a event;
Cleaner : The thread 9generator a event;
Cleaner : The thread 8generator a event;
Deque : size of the thread is 27
Cleaner : The thread 8generator a event;
Cleaner : The thread 10generator a event;
Cleaner : The thread 9generator a event;
Deque : size of the thread is 27
Cleaner : The thread 9generator a event;
Cleaner : The thread 10generator a event;
Cleaner : The thread 8generator a event;
Deque : size of the thread is 27
Cleaner : The thread 9generator a event;
Cleaner : The thread 10generator a event;
Cleaner : The thread 8generator a event;
Deque : size of the thread is 27
Cleaner : The thread 9generator a event;
Deque : size of the thread is 29
Cleaner : The thread 10generator a event;
Cleaner : The thread 8generator a event;
Deque : size of the thread is 27
Cleaner : The thread 8generator a event;
Cleaner : The thread 10generator a event;
Cleaner : The thread 9generator a event;
Deque : size of the thread is 27
Cleaner : The thread 8generator a event;
Deque : size of the thread is 29
Cleaner : The thread 9generator a event;
Deque : size of the thread is 30
Cleaner : The thread 10generator a event;
Deque : size of the thread is 29
- 6.多线程学习--守护线程的创建和运行
- 6.多线程学习--守护线程的创建和运行
- Java并发编程-03-守护线程的创建和运行
- java多线程---线程的创建和运行
- 守护(Daemon)线程的创建及运行
- 1.7守护线程的创建与运行
- 多线程的守护线程
- JAVA基础学习(十一)--多线程一线程的创建,运行,同步和锁
- Python多线程的创建,相关函数和守护线程的理解
- 玩转java多线程学习篇五 线程的优先级和守护线程
- Java多线程的分类:用户线程和守护线程
- 多线程状态的和守护线程的理解
- java 多线程守护线程和非守护线程
- Java 多线程:守护线程和非守护线程
- 线程的创建和运行
- linux多线程学习(二)—线程的创建和退出
- 并发编程--守护进程的创建和运行
- Java多线程-线程的调度(守护线程)
- 如何写一个使用Web Service的IOS应用
- 【v2.x OGE教程 20】粒子效果
- StateMachine状态机
- Objective-C Runtime 运行时之一:类与对象
- UIAlertView的各种属性、方法及代理的使用
- 6.多线程学习--守护线程的创建和运行
- 【v2.x OGE-example 第三节 播放精灵动画】
- border形状设置
- iOS常见bug
- 伪造成长计划
- Android开发之Activity之间数据通信的几种方式
- 【高效程序员系列】2、别做机器人——让工作自动化
- 南阳 oj 176 整数划分(二)
- C++程序设计-2014年10月-月末学习总结