DelayQueue使用介绍 Semaphore使用介绍 CountDownLatch使用介绍

2018-02-12 20:47:00
admin
原创 1762
摘要:DelayQueue使用介绍 Semaphore使用介绍 CountDownLatch使用介绍

一、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、多槽数组大小不会变化,但是实际槽位动态增减,这样可以提升匹配效率;

发表评论
评论通过审核之后才会显示。