同步工具笔记

Semaphore 信号量

控制同时访问资源的线程数量,类似于令牌桶。基于aqs实现
关键用法

Semaphore semaphore = new Semaphore(3,true);
semaphore.acquire();//子线程开始前调用
semaphore.release();//同一个子线程结束后调用

CountDownLatch

等待其它线程执行完以后再执行。基于aqs实现

ConutDownLatch latch = new CountDownLatch();
latch.countDown();//子线程执行结束后调用
latch.await();//主线程

CyclicBarrier 回环栅栏

多个线程等到某个状态后同时执行。基于ReentrantLock+Condition实现。

CyclicBarrier barrier = new CyclicBarrier(5);
barrier.await();//子线程开始前调用

Exchanger

数据交换,用于线程间的通信。共享变量node,基于cas+park/unpark

Exchanger exchanger = new Exchanger();
exchanger.exchange(...);//交换数据的多个线程调用

Phaser

jdk1.7后开始提供,可用来取代CountDownLatch和CyclicBarrier

Phaser phaser = new Phaser(2);

//取代CountDownLatch方法
phaser.arrive();
phaser.awaitAdvance(phaser.getphase());

//取代CyclicBarrier方法
phaser.awaitAdvance(0);

新特性

1、动态调整线程个数
2、内部采取树状存储,父节点对子节点无感知,子节点维护父节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖工-->攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值