- 它是基于优先级阻塞队列(优先级的判断通过构造函数传入的Compato对象来决定,也就是传入的队列对象必须实现comparable接口),在实现ProprityBlockingQueue时,内部控制线程的锁采用的是公平锁,它也是一个无界队列。
- public class Task implements Comparable<Task>{
- private int id ;
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public int compareTo(Task task) {
- return this.id > task.id ? 1 : (this.id < task.id ? -1 : 0);
- }
- public String toString(){
- return this.id + "," + this.name;
- }
- }
- public class UsePriorityBlockingQueue {
- public static void main(String[] args) throws Exception{
- PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>();
- Task t1 = new Task();
- t1.setId(3);
- t1.setName("id为3");
- Task t2 = new Task();
- t2.setId(4);
- t2.setName("id为4");
- Task t3 = new Task();
- t3.setId(1);
- t3.setName("id为1");
- q.add(t2);//4
- q.add(t3); //1
- q.add(t1); //3
- // 1 3 4
- System.out.println("容器:" + q);
- System.out.println(q.take().getId());
- System.out.println("容器:" + q);
- }
- }
- 输出结果:当调用take()方法取出一个才会进行排序。
- 容器:[1,id为1, 4,id为4, 3,id为3]
- 1
- 容器:[3,id为3, 4,id为4]
13.ProprityBlockingQueue
最新推荐文章于 2023-10-02 22:38:20 发布