13.ProprityBlockingQueue

  1. 它是基于优先级阻塞队列(优先级的判断通过构造函数传入的Compato对象来决定,也就是传入的队列对象必须实现comparable接口),在实现ProprityBlockingQueue时,内部控制线程的锁采用的是公平锁,它也是一个无界队列。
  2. public class Task implements Comparable<Task>{
  3.   
  4.    private int id ;
  5.    private String name;
  6.    public int getId() {
  7.       return id;
  8.    }
  9.    public void setId(int id) {
  10.       this.id = id;
  11.    }
  12.    public String getName() {
  13.       return name;
  14.    }
  15.    public void setName(String name) {
  16.       this.name = name;
  17.    }
  18.   
  19.    @Override
  20.    public int compareTo(Task task) {
  21.      
  22.       return this.id > task.id ? 1 : (this.id < task.id ? -1 : 0); 
  23.    }
  24.   
  25.    public String toString(){
  26.       return this.id + "," + this.name;
  27.    }
  28.   
  29. }
  30. public class UsePriorityBlockingQueue {
  31.  
  32.   
  33.    public static void main(String[] args) throws Exception{
  34.      
  35.      
  36.       PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>();
  37.      
  38.       Task t1 = new Task();
  39.       t1.setId(3);
  40.       t1.setName("id3");
  41.       Task t2 = new Task();
  42.       t2.setId(4);
  43.       t2.setName("id4");
  44.       Task t3 = new Task();
  45.       t3.setId(1);
  46.       t3.setName("id1");
  47.      
  48.      
  49.       q.add(t2);//4
  50.       q.add(t3);  //1
  51.       q.add(t1);   //3
  52.      
  53.      
  54.       // 1 3 4
  55.       System.out.println("容器:" + q);
  56.       System.out.println(q.take().getId());
  57.       System.out.println("容器:" + q);
  58.      
  59.      
  60.  
  61.      
  62.    }
  63. }
  64.  
  65. 输出结果:当调用take()方法取出一个才会进行排序。
  66. 容器:[1,id1, 4,id4, 3,id3]
  67. 1
  68. 容器:[3,id3, 4,id4]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值