Java并发编程-32-带有延迟元素的队列-DelayQueue
来源:互联网 发布:360网页广告拦截软件 编辑:程序博客网 时间:2024/06/05 05:12
一、DelayQueue
可以存放带有激活日期的元素,当调用方法从队列中返回或提取元素时,未来日期的元素将被忽略
package concurrencycollection;import java.util.Date;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public class Event2 implements Delayed {private Date startDate;public Event2(Date startDate) {this.startDate = startDate;}@Overridepublic int compareTo(Delayed o) {// TODO Auto-generated method stublong result = this.getDelay(TimeUnit.NANOSECONDS)- o.getDelay(TimeUnit.NANOSECONDS);if (result < 0)return -1;else if (result > 0)return 1;return 0;}/** * 返回到激活日期的剩余时间,单位由参数指定 */@Overridepublic long getDelay(TimeUnit unit) {// TODO Auto-generated method stubDate nowDate = new Date();long diff = startDate.getTime() - nowDate.getTime();return unit.convert(diff, TimeUnit.MILLISECONDS);}}package concurrencycollection;import java.util.Date;import java.util.concurrent.DelayQueue;public class Task2 implements Runnable {private int id;private DelayQueue<Event2> delayQueue;public Task2(int id, DelayQueue<Event2> delayQueue) {this.id = id;this.delayQueue = delayQueue;}@Overridepublic void run() {Date nowDate = new Date();Date delay = new Date();delay.setTime(nowDate.getTime() + id * 1000);System.out.println("Thread " + id + " " + delay);for (int i = 0; i < 100; i++) {Event2 event2 = new Event2(delay);delayQueue.add(event2);}}}package concurrencycollection;import java.util.Date;import java.util.concurrent.DelayQueue;import java.util.concurrent.TimeUnit;public class Main3 {public static void main(String[] args) {DelayQueue<Event2> delayQueue = new DelayQueue<Event2>();Thread[] threads = new Thread[5];for (int i = 0; i < threads.length; i++) {Task2 task2 = new Task2(i + 1, delayQueue);threads[i] = new Thread(task2);}for (int i = 0; i < threads.length; i++) {threads[i].start();}for (int i = 0; i < threads.length; i++) {try {threads[i].join();} catch (InterruptedException e) {e.printStackTrace();}}do {int counter = 0;Event2 event2;do {event2 = delayQueue.poll();if (event2 != null)counter++;} while (event2 != null);System.out.printf("At %s you have read %d events\n", new Date(),counter);try {TimeUnit.MILLISECONDS.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}} while (delayQueue.size() > 0);}}
0 0
- Java并发编程-32-带有延迟元素的队列-DelayQueue
- 延迟队列 DelayQueue 【JAVA】
- java并发编程实战第六章(5)使用带有延迟元素的线程安全列表
- java并发容器——延迟队列DelayQueue
- Java多线程/并发27、DelayQueue延迟队列模拟实现Session
- 【Java】延迟队列DelayQueue里的坑 concurrent.Delayed
- 延迟队列DelayQueue的使用示例
- 延迟队列DelayQueue
- 延迟阻塞队列DelayQueue
- 三 : DelayQueue 延迟队列
- 延迟队列DelayQueue示例
- 延迟队列 DelayQueue
- 延迟队列DelayQueue
- Java 并发 --- 阻塞队列之DelayQueue源码分析
- java编程思想笔记-并发之DelayQueue和PriorityBlockingQueue
- Java 并发工具包-BlockingQueue-DelayQueue
- Java通过DelayQueue的实现多线程任务的阻塞队列
- 使用线程安全的、带有延迟元素的列表
- JAVA词汇大全
- mysql数据库高可用高扩展性架构方案实施
- linux下安装和配置DNS服务器
- 常用sql
- 黑马程序员——JAVA笔记——装饰设计模式
- Java并发编程-32-带有延迟元素的队列-DelayQueue
- Linux-shell基础-1
- JDBC实例2 关于分包下不同表实体类的外键类型转换
- 交换排序-冒泡排序
- 剑指offer第三题:二维数组中查找
- OpenCV+C++ 视频图片相互转换
- uva6511 强连通分量
- poj 2388 Who's in the Middle
- VS2013快捷键