`

PriorityBlockingQueue

 
阅读更多
package com.bjsxt.base.coll013;

 

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) {

// TODO Auto-generated method stub  

        //按照id进行升序排序  

        //如果对象本身的id大于传入的对象id,  

        //返回值是正数,就是升序排序  

        //返回值是负数,就是降序排序  

//      if(id>o.getId()) {  

//          return 1;  

//      } else if(id==o.getId()) {  

//          return 0;  

//      }  

//      return -1;  

//      return name.compareTo(o.getName());  

        if(this.id > task.id) {  

            return -1;  

        } else if(this.id == task.id) {  

            return 0;  

        }  

        return 1;  

    }  

public String toString(){

return this.id + "," + this.name;

 

}

 

}

 

 

package com.bjsxt.base.coll013;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;

/**
 * @author Administrator
 *PriorityBlockingQueue:基于优先级的堵塞队列。无界队列,队列对象必须实现Comparable接口。
 *注意:添加一个元素不会排序,只有调用task方法取行数的时候才会比较取值。
 */
public class UsePriorityBlockingQueue {

	
	public static void main(String[] args) throws Exception{
		
		
		PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>();
		
		Task t1 = new Task();
		t1.setId(40);
		t1.setName("id为3");
		Task t2 = new Task();
		t2.setId(30);
		t2.setName("id为4");
		Task t3 = new Task();
		t3.setId(10);
		t3.setName("id为1");
		
		//return this.id > task.id ? 1 : 0;
		q.add(t2);	//4
		q.add(t1);	//3
		q.add(t3);  //1
		
		// 1 3 4
		System.out.println("容器:" + q);
		System.out.println(q.take().getId());
		//System.out.println("容器:" + q);
		System.out.println(q.take().getId());
		System.out.println(q.take().getId());
		

		
	}
}

 

分享到:
评论

相关推荐

    priorityblockingqueue的使用

    PriorityBlockingQueue是一个高级的并发数据结构,它是Java并发包(java.util.concurrent)中的一个无界线程安全队列。这个队列的特殊之处在于它基于优先堆实现,因此队列中的元素按照一定的优先级顺序进行排列。在...

    Java_0613_java_源码

    这个主题涉及到Java并发库中的`java.util.concurrent.PriorityBlockingQueue`类,它是线程安全的,适用于高并发场景。 首先,`PriorityBlockingQueue`实现了`BlockingQueue`接口,这意味着它支持阻塞插入(put)和...

    阻塞队列阻塞队列阻塞队列

    PriorityBlockingQueue不会保证线程公平性,但是它能保证元素的出队顺序遵循优先级规则,这在需要执行优先级任务的场景下非常有用。 这些阻塞队列都实现了java.util.concurrent.BlockingQueue接口,提供了如put、...

    一个小的java Demo , 非常适合Java初学者学习阅读.rar

    链阻塞队列 LinkedBlockingQueue,具有优先级的阻塞队列 PriorityBlockingQueue, 同步队列 SynchronousQueue,阻塞双端队列 BlockingDeque, 链阻塞双端队列 LinkedBlockingDeque,并发 Map(映射) ConcurrentMap, ...

    Android开发经验谈:并发编程(线程与线程池)(推荐)

    Android开发经验谈:并发编程(线程与线程池) Android开发中,线程和线程池是两个非常重要的概念。...* ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等队列的使用方法

    Java并发编程相关源码集 包括多任务线程,线程池等.rar

    多个线程竞争问题、多个线程多个锁问题、创建一个缓存的线程池、多线程使用Vector或者HashTable的示例(简单线程同步问题)、PriorityBlockingQueue示例、高性能无阻塞无界队列: ConcurrentLinkedQueue、DelayQueue...

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    阻塞队列在Java中的实现主要由`java.util.concurrent`包下的几个类提供,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。这些队列在插入和移除元素时,如果队列满或空,会自动阻塞相应...

    并发容器的原理,7大并发容器详解、及使用场景

    它们分别基于链表、数组和优先级堆实现,其中 ArrayBlockingQueue 和 LinkedBlockingQueue 使用 ReentrantLock 和 Condition 实现线程安全,PriorityBlockingQueue 则是一个按优先级排序的队列。 在选择并发容器时...

    java并发工具包详解

    6. 具有优先级的阻塞队列 PriorityBlockingQueue 7. 同步队列 Synchronou sQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    6. 具有优先级的阻塞队列 PriorityBlockingQueue 7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    具有优先级的阻塞队列 PriorityBlockingQueue 7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航 映射 ...

    简单实现BlockingQueue,BlockingQueue源码详解

    在Java中,有几个实现了BlockingQueue接口的类,如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等,它们各有特点: 1. **ArrayBlockingQueue**:基于数组的有界阻塞队列,容量固定,插入和删除...

    java线程大总结.pdf

    `BlockingQueue`接口继承自`Queue`接口,提供了多种实现,如`ArrayBlockingQueue`、`DelayQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`和`SynchronousQueue`。每个实现都有其特定的特性和使用场景,例如...

    10、阻塞队列BlockingQueue实战及其原理分析

    在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue`, `LinkedBlockingQueue`, `PriorityBlockingQueue`等。 阻塞队列的核心特性在于其“阻塞”行为:当队列为空时,尝试获取...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版pdf

    java.util.concurrent包提供了多种BlockingQueue的实现,包括ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue和SynchronousQueue。每个实现都有其特定的用例和特性,例如...

    Android网络业务的封装与调度.pdf

    通过PriorityBlockingQueue实现了一个阻塞队列,它保证了任务按照优先级进行排队。任务优先级的确定是通过实现Comparable接口来完成的。在任务的实现类中,通过对优先级的比较,实现了任务执行的优先级调度。 5. *...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    6. 具有优先级的阻塞队列 PriorityBlockingQueue 7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ...

    Blocking Queue Usage

    Blocking Queue的实现类有很多,如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等。ArrayBlockingQueue是基于数组的有界阻塞队列,其大小在创建时就固定了,提供了公平与非公平两种锁策略。...

    java并发包资源

    6. 具有优先级的阻塞队列 PriorityBlockingQueue 7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ...

    BlockingQueue的使用

    BlockingQueue还提供了一组容量有限的实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。这些实现类的内部结构和性能特性有所不同,开发者可以根据实际需求选择合适的实现。 - `...

Global site tag (gtag.js) - Google Analytics