并发编程 - JUC中常用的同步工具

ReentrantLock - 独占锁

特性:①独占锁 ②可重入 ③公平/非公平 ④可超时中断

+ View Code

ReentrantReadWriteLock - 读写锁

ReentrantReadWriteLock使用同一个Sync队列,重写了共享资源/互斥资源的获取与释放逻辑,通过state的高16位存储共享状态,state的低16位存储互斥状态。
API:①readLock() - 获取读锁 ②writeLock() - 获取写锁 =③lock.lock()/unlock()

+ View Code

Condition - 条件等待

Condition是JUC提供的,功能等同于wait/notify功能的接口,具体实现为AbstractQueuedSynchronizer的内部类ConditionObject(只能在AQS对象实例内部创建),基于一个单向的Fifo队列实现等待与唤醒
API:①await() ②signal() ③signalAll()

+ View Code

CountDownLatch 计数器

线程调用countDownLatch.await()方法时将会被挂起,直到计数器计数值减为0时,唤醒所有await()线程 - 底层为共享模式的实现
API:①await() ②countDown() - 计数值减一

+ View Code

Semaphore 信号灯(令牌桶)

只有获得令牌的线程可以继续执行,用以控制同时访问的线程个数。
API:①acquire() - 获取令牌 ②release() - 释放令牌

+ View Code

CyclicBarrier - 循环屏障

让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,所有被屏障拦截的线程才会继续工作。
(由最后一个进入线程执行barrierAction,并唤醒对应数量的await状态线程,然后计数值会reset,计入下一次循环)
API: await() - CyclicBarrier是当最后一个线程到达屏障时,自动唤醒。

+ View Code

Exchanger - 值交换器

用以实现两个线程之间消息的交换,先到达exchange()的线程将被阻塞,等待下一个线程exchange()唤醒

+ View Code

posted @   祁奇  阅读(109)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示