DelayQueue使用介绍 Semaphore使用介绍 CountDownLatch使用介绍
- 2018-02-12 20:47:00
- admin
- 原创 1918
一、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,保证多线程操作队列不会冲突;
三、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、只有一个许可的信号量可以当做互斥锁使用,与锁的区别是任意线程都可以释放信号;
四、CountDownLatch使用介绍
函数说明:
1、CountDownLatch(int count),构造指定计数的开关;
2、void await(),等待计数到零;
3、boolean await(long timeout,TimeUnit unit),等待计数到零;
4、void countDown(),减去一个计数;
5、long getCount(),获取当前计数;
使用详解:
CountDownLatch用于构造指定计数的开关,当计数为零时所有调用await的线程被唤醒;
五、CyclicBarrier使用介绍
函数说明:
1、CyclicBarrier(int parties),指定数量的线程进入屏障,屏障才启动;
2、CyclicBarrier(int parties, Runnable action),指定数量的线程进入屏障,屏障才启动,最后一个进入屏障的线程执行动作;
3、int await(),进入屏障并休眠,直到屏障启动;
4、await(long timeout, TimeUnit unit),进入屏障并休眠,直到屏障启动;
5、boolean isBroken(),屏障是否被中断;
6、void reset(),重置屏障;
7、int getParties(),屏障启动需要的线程数量;
8、int getNumberWaiting(),当前等待屏障的线程数量;
使用详解:
1、屏障成功启动后可以重新使用,或者重置屏障以便重新使用;
2、屏障成功启动后返回当前线程索引,第一个到达的线程是getParties()-1,最后一个到达的线程是0;
3、屏障中断场景:等待屏障超时、执行动作异常、线程被中断、屏障被重置;
六、Exchanger使用介绍
函数说明:
1、Exchanger(),构造线程数据交换器;
2、V exchange(V x),进行数据交换,在能够交换之前线程一直等待;
3、V exchange(V x, long timeout, TimeUnit unit),进行数据交换,在能够交换之前线程一直等待;
使用详解:
1、线程数据交换器用于线程之间进行数据交换;
2、竞争不激烈时使用单槽交换,竞争激烈时使用多槽交换;
3、多槽数组大小不会变化,但是实际槽位动态增减,这样可以提升匹配效率;