juc集合框架

《juc集合框架》

collections

Queues

    BlockingQueue:通常用于一个线程生产对象,而另外一个线程消费这些对象的场景
         LinkedBlockingQueue
         ArrayBlockingQueue
         SynchronousQueue
         PriorityBlockingQueue
         DelayQueue
    Deque:双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程; 在不能够抽取元素时,它将阻塞住试图抽取的线程
        ArrayDeque
    ConcurrentHashMap
    ConcurrentSkipListMap
    ConcurrentSkipListSet
    CopyOnWriteArrayList
    CopyOnWriteArraySet

Executor

Future

《juc集合框架》

locks

java.util.concurrent.locks.Lock是一个类似于 synchronized 块的线程同步机制。但是 Lock 比 synchronized 块更加灵活、精细。

1. ReentrantLock:提供了一种无条件的可轮询的,定时的以及可中断的锁获取操作,所有加锁和解锁的方式都是显示的
2. Condition:广义的内置条件队列
3. ReadWriteLock:读写锁

tools

CountDownLatch:闭锁
    它允许一个或多个线程等待一系列指 定操作的完成。CountDownLatch 以一个给定的数量初始化。countDown() 每被调用一次,这一数量就减一。 通过调用 await() 方法之一,线程可以阻塞等待这一数量到达零。
 CyclicBarrier:栅栏
     用于等待其他线程,实现一些协议。CyclicBarrier可以使一定数量的参与方反复的在在栅栏位置汇集,他在并行迭代算法中非常有用:
     这种算法通常将一个问题拆分成称一系列独立的子问题。当线程到达栅栏位置,将调用await方法,这个方法将阻塞知道所有线程都到达栅栏位置。如果所有线程都到达栅栏位置那么栅栏将打开,此时所有线程都释放,而栅栏将被重置以便下次使用。
 Semaphore:信号量
    用来控制同时访问某个特定资源的操作数量,或者同时执行某个制定操作的数量。还可以实现某种资源池或者对容器施加边界。
 Exchanger:表示一种两个线程可以进行互相交换对象的会和点。这种机
制图示如下: 

《juc集合框架》

Phaser:可重用同步栅栏,功能与CyclicBarrier and CountDownLatch相似,但提供更多灵活的用法 。在Phaser中,它把多个线程协作执行的任务划分为多个阶段,编程时需要明确各个阶段的任务,每个阶段都可以有任意个参与者,线程都可以随时注册并参与到某个阶段。功能如下:
注册:register()/bulkRegister(int)/或者构造器初始化同时申明多少个参与者,每个阶段都可以有任意个参与者,线程都可以随时注册并参与到某个阶段
同步:
终结:isTerminated(),会产生一个结束状态
分层:phaser使用分层结构(树结构来构造)来减少竞争。
监控:
 Executors:线程池
  1. newFixedThreadPool:固定长度的线程池,每当提交一个任务就创建一个线程池,直到达到线程池的最大数量。
  2. newCachedThreadPool:可缓存的线程池,如果线程池的当前规模超过了处理需求,那么回收当前空闲线程,而当需求增加时,可以添加新的线程池,规模不受限制
  3. newSingleThreadExecutor:单线程的Executor,创建单个工作者线程来执行任务,如果线程异常结束,会创建另一个线程来结束
  4. newScheduledThreadPool:固定长度的线程池,以延迟或定时的方式来执行
  5.newWorkStealingPool:创建一个拥有多个任务队列(以便减少连接数)的 ExecutorService

《juc集合框架》

.

    原文作者:JUC
    原文地址: https://blog.csdn.net/duiop99/article/details/79648830
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞