JUC:
- 可重入锁ReentrantLock:
- lock写在try之前
- 使用完锁之后,一定要在finally进行unlock
- 信号量Semaphore:用来控制锁的数量,实现限流
- acquire():尝试获取锁,获取到,执行后面的业务逻辑,获取不到,则进入阻塞等待状态
- release():释放锁,发布的意思
- 计数器CountDownlatch:
-
await():当线程数量不满足计数器的数量时,执行此方法就会阻塞等待,直到数量满足之后,才继续执行
-
countDown:计数器操作-1
实现过程:在CountDownLatch里面有一个计数器,计数器的数量在初始化时设置,每次调用countDown计数器减一,直至计数器为0,就可以执行Await方法后的的代码了。
缺点:只能使用一次
使用场景:执行完一批操作后,在执行下一批 -
面试题:CountDownlatch如何实现的?
答:在CountDownLatch里面有一个计数器,每次调用countDown()方法的时候计数器的数量-1,await()方法进行阻 塞等待,1减到0后,就可以执行await()之后的代码。
- 循环屏障(循环栅栏)CyclicBarrier:
-
await():计数器-1,并判断是否为0,不为0则阻塞等待,为0就继续执行之后的代码,并重置计数器的值。
实现过程:内部有一个可以重复使用的计数器count,每次执行await()方法后,计数器减一直至计数器为0,可执行await()后的代码,并且会将count重置为初始值,继续使用 -
面试题:CyclicBarrier和CountDownLatch的区别:一个计数器可重复使用,一个计数器只能执行一次。