Semaphore使用介绍 PriorityBlockingQueue使用介绍 DelayQueue使用介绍
- 2018-02-12 20:47:00
- admin
- 原创 1460
一、Semaphore使用介绍
函数说明:
1、void acquire(),获取一个许可,被中断时抛出异常;
2、void acquireUninterruptibly(),获取一个许可,不允许被中断;
3、boolean tryAcquire(long timeout, TimeUnit unit),非公平信号量保持不公平,公平信号量保持公平;
4、boolean tryAcquire(),抢占式获取许可,获取不到立即返回;
5、void release(),释放一个许可,任何线程都可以释放;
6、int drainPermits(),清空剩余所有许可;
使用详解:
1、信号量用于维护一个许可集合,默认是非公平信号量,除非指定公平参数;
2、只有一个许可的信号量可以当做互斥锁使用,与锁的区别是任意线程都可以释放信号;
二、PriorityBlockingQueue使用介绍
class PriorityBlockingQueue<E> extends AbstractQueue<E>
1、offer(E e)、add(E e)、put(E e),插入元素;
2、boolean offer(E e, long timeout, TimeUnit unit),插入元素;
3、E poll(),检索并移除元素;
4、E peek(),获取队列顶部元素;
5、E take(),检索并移除元素,如果无法获取则一直等待;
6、E poll(long timeout, TimeUnit unit),检索并移除元素,允许指定超时时间;
使用详解:
1、PriorityBlockingQueue不允许插入null元素,否则抛出NullPointerException;
2、PriorityBlockingQueue维护一个ReentrantLock,保证多线程操作队列不会冲突;
3、PriorityBlockingQueue扩容过程中会释放锁,不影响其它线程插入元素和获取元素;
三、DelayQueue使用介绍
interface Delayed extends Comparable<Delayed>
1、long getDelay(TimeUnit unit),返回对象的剩余延迟时间;
class DelayQueue<E extends Delayed> extends AbstractQueue<E>
1、offer(E e)、add(E e)、put(E e),插入元素;
2、boolean offer(E e, long timeout, TimeUnit unit),插入元素;
3、E poll(),检索并移除元素,如果元素未到期则返回null;
4、E peek(),获取队列顶部元素,如果队列为空则返回null;
5、E take(),检索并移除元素,如果无法获取则一直等待;
6、E poll(long timeout, TimeUnit unit),检索并移除元素,允许指定超时时间;
使用详解:
1、DelayQueue不允许插入null元素,否则抛出NullPointerException;
2、DelayQueue维护一个ReentrantLock,保证多线程操作队列不会冲突;