Java并发编程-31-阻塞式优先级列表-PriorityBlockingQueue
2015-06-20 21:49
651 查看
一、PriorityBlockingQueue
1、PriorityBlockingQueue里面的元素必须实现Comparable接口
2、PriorityBlockingQueue,这个是阻塞式数据结构,当调用的方法不能立即执行时,调用这个方法的线程将被阻塞直到方法可以成功执行
3、提供的方法
二、测试
1、PriorityBlockingQueue里面的元素必须实现Comparable接口
2、PriorityBlockingQueue,这个是阻塞式数据结构,当调用的方法不能立即执行时,调用这个方法的线程将被阻塞直到方法可以成功执行
3、提供的方法
二、测试
package concurrencycollection; public class Event implements Comparable<Event> { private int counterOfThread; private int priority; public Event(int counterOfThread, int priority) { this.counterOfThread = counterOfThread; this.priority = priority; } public int getCounterOfThread() { return counterOfThread; } public int getPriority() { return priority; } @Override public int compareTo(Event o) { // TODO Auto-generated method stub if (this.getPriority() > o.getPriority()) { return -1; } else if (this.getPriority() < o.getPriority()) { return 1; } return 0; } @Override public String toString() { return "Event [counterOfThread=" + counterOfThread + ", priority=" + priority + "]"; } }
package concurrencycollection; import java.util.concurrent.PriorityBlockingQueue; public class Task implements Runnable { private int id; private PriorityBlockingQueue<Event> priorityBlockingQueue; public Task(int id, PriorityBlockingQueue<Event> priorityBlockingQueue) { this.id = id; this.priorityBlockingQueue = priorityBlockingQueue; } @Override public void run() { for (int i = 0; i < 1000; i++) { Event event = new Event(id, i); priorityBlockingQueue.add(event); } } }
package concurrencycollection; import java.util.concurrent.PriorityBlockingQueue; public class Main2 { public static void main(String[] args) { PriorityBlockingQueue<Event> priorityBlockingQueue = new PriorityBlockingQueue<Event>(); Thread[] threads = new Thread[5]; for (int i = 0; i < threads.length; i++) { Task task = new Task(i, priorityBlockingQueue); threads[i] = new Thread(task); } 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(); } } System.out .println("Main : Queue size :" + priorityBlockingQueue.size()); for (int i = 0; i < threads.length * 1000; i++) { Event event = priorityBlockingQueue.poll(); System.out.println(event); } System.out .println("Main : Queue size :" + priorityBlockingQueue.size()); System.out.println("Main : End of the program\n"); } }
相关文章推荐
- hdu 5273 Dylans loves sequence
- HDU 5273 Dylans loves sequence(区间DP)
- UISegmentedControl的详细使用
- hdu 5273 Dylans loves sequence
- UVa1152 - 4 Values whose Sum is 0(hash)
- UVa1605 - Building for UN(构造)
- GitLab:解决Merge Request中Commits不更新的问题
- ABP 初探 之基于EasyUI的CURD
- Ubuntu12.04配置vnc远程桌面,解决Could not acquire name on session bus问题
- hdu 5273 Dylans loves sequence 逆序数简单递推
- 11gR2 OUI安装界面的System Class和 Desktop Class
- Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response
- Java并发编程-30-阻塞式线程安全列表-LinkedBlockingDeque
- ubuntu 12.04下配置单机pbs(torque)
- 自己实现基于key-value的NoSQL数据库(二)—— 改进存储方式和查询修改函数
- [原创]UUID的介绍和使用
- UITableView_XIB实现_可重用Cell_封装步骤
- SequenceFile在Hadoop中使用
- 设置UIView的位置和尺寸
- NGUI学习笔记(二):基础笔记