PriorityBlockingQueue类是JDK提供的优先级队列 本身是线程安全的 内部使用显示锁 保证线程安全
PriorityBlockingQueue存储的对象必须是实现Comparable接口的 因为PriorityBlockingQueue队列会根据内部存储的每一个元素的compareTo方法比较每个元素的大小
这样在take出来的时候会根据优先级 将优先级最小的最先取出
下面是示例代码
- public static PriorityBlockingQueue<User> queue = new PriorityBlockingQueue<User>();
-
- public static void main(String[] args) {
- queue.add(new User(1,"wu"));
- queue.add(new User(5,"wu5"));
- queue.add(new User(23,"wu23"));
- queue.add(new User(55,"wu55"));
- queue.add(new User(9,"wu9"));
- queue.add(new User(3,"wu3"));
- for (User user : queue) {
- try {
- System.out.println(queue.take().name);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
-
- static class User implements Comparable<User>{
-
- public User(int age,String name) {
- this.age = age;
- this.name = name;
- }
-
- int age;
- String name;
-
- @Override
- public int compareTo(User o) {
- return this.age > o.age ? -1 : 1;
- }
- }
输出结果
wu
wu3
wu5
wu9
wu23
wu55