java并发包juc下的相关内容

java的juc包下面的一些内容

注:根据java8的文档摘取的材料
![在这里插入
java.util.concurrent包下面主要包括三个部分:并发常用的一些类(CountDownLatch,Sempahore,CyclicBarrier),locks包(ReentrantLock,ReadWriteLock,ReentrantReadWriteLock),atomic包(AtomicInteger,AtomicBoolean,AtomicLong)
依次说明一下每个包,以及下面的具体类

juc包

描述:实用程序类通常在并发编程中很有用

Semaphore(信号量)

描述:一个计数信号量,概念上信号量维持一组固定数量的许可证(permits),主要通过acquire()方法获取凭证,release()方法释放凭证。
详细每个方法调用链:
semaphore():首先简述一下semaphore类的相关类和它们的关系,semaphore类中有一个抽象内部类Sync,并且Sync继承自AQS(AbstractQueuedSynchronized),并且Sync还有两个策略分别是Fair的和NonFair的Sync,两种策略的区别在于if (hasQueuedPredecessors())校验是否有线程在排队,有排队的话返回-1。回到方法本身默认是NonFair的策略调用其初始化方法,然后是Aqs中的setState(permits)方法。最终达到设置state的目的。
acquire():调用sync的acquireSharedInterruptibly()方法,获取共享锁,然后进行判断state是否符合条件,不符合那么就加入到addWaiter()中去,符合就执行state+1。下面上图。
java并发包juc下的相关内容_第1张图片
release():释放许可,调用Sync的父类的Aqs的releaseShared()方法,进行释放。
使用场景:限流,例如停车场固定停车位,只能有固定数量的车停到停车位。

CountDownLatch(计数器)

描述:允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。通过初始化方法,设置一个count数值,两个主要方法await(),使某个线程等待,和countDown()方法,减少cout的数值。
详述每个方法的调用链:
new CountDownLatch(4):通过其内部的Sync类,同时Sync继承自Aqs,最终调用了Aqs的setState()方法,设置state数值。
countDown():调用Sync的父类Aqs的releaseShared()方法,执行countDownLatch的tryReleaseShared()方法,此方法会进行state-1,如果计算后state经过几所后等于0,那么返回true最后才执行Aqs的doReleaseShared()方法唤醒处于await状态下的线程。
await():是一个阻塞方法,直到state==0时,才会返回1,不等于0时返回-1,返回-1就会执行Aqs的doAcquireSharedInterruptibly()方法,进行addwaiter将其加入等待队列。
使用场景:类似门,或者开关的功能,比如裁判吹哨几个运动员再进行比赛,等待所有运动员到达终点再进行统计成绩这种。

CyclicBarrier(回环栅栏)

描述:允许一组线程等待彼此达到共同的屏障点的同步辅助

Lock包

ReentrantLock(可重入互斥锁)

描述:一个可重入的互斥锁具有与Synchronized相同的行为和语义,但具有可拓展功能。
详述每个方法的调用链:
ReentrantLock():构造方法,返回其内部的Sync类的子类,默认是NonFairSync()策略的,同时Sync是继承自Aqs的。
Lock():锁方法,默认是非公平的lock方法,与公平的lock方法区别在于,非公平会多一个cas的步骤,非公平的lock方法首先会进行cas抢占,如果成功将当前线程设置为独占的状态,如果没有成功进行acquired()方法将当前线程加入到等待队列中。
unlock():解锁,调用非公平NonFair的release()方法,中间通过tryRelease()方法将state-1,返回true则进行unpark唤醒后续节点。
使用场景:与synchronized相同的功能,提供互斥锁的场景。

ReentrantReadWriteLock(可重入读写锁)

描述:基于读写锁的一个高效的一个锁,符合读多写少的场景。

Atomic(支持单个变量上的无锁线程安全)

AtomicInteger

描述:int的原子性的类

AtomicLong

描述:long的原子性的类

AtomicBoolean

描述:Boolean的原子性的类

你可能感兴趣的:(java,java)