并发库:同步工具类

1、Semaphore计数信号量

Semaphore计数信号量维护了一个许可集,用于限制访问某些资源的线程数目,并提供同步机制。

通俗来说,就是可以控制让多个线程拿到许可,拿到许可的线程可以并发管理同一个资源,这些拿到许可的线程可以看做一个整体。

如果是单个信号量的Semaphore对象,就可以实现互斥锁的功能,而且,可以由一个线程获得许可,另一个线程去释放许可。可以应用于死锁恢复的一些场合。

创建信号量对象

第二个构造的第二个参数表示当有一个许可被释放之后,替补的线程是以什么方式去拿到这个许可,如果为true,则表示是公平的,谁先来谁上;false表示是竞争上岗。

让线程获取许可

在线程内调用Semaphore对象的acquire方法,从此信号量中获取一个许可。

让线程释放许可

在线程内调用Semaphore对象的release方法,来释放一个许可。

获取可用的许可数


2、CyclicBarrier

一个同步辅助类,它要求一组线程互相等待,直到全部到达某个公共屏障点。还可以设置全部到齐之后再去做什么事情。

两个构造方法如下:

设置公共屏障点


3、CountDownLatch

类似倒计时计数器,调用CountDownLatch的countDown方法将计数器减1,当计数到达0时,所有等待的线程开始执行。

CountDownLatch类的等待方法


4、Exchanger

用于实现两个线程之间的数据交换。如果有两个线程在完成一定的任务后想与对方交换数据,先拿出数据的线程会保持等待,只有第二个线程拿着数据到来时,才会彼此交换数据。好比交易时一手交钱一手交货。

发布了70 篇原创文章 · 获赞 1 · 访问量 2270

猜你喜欢

转载自blog.csdn.net/caozp913/article/details/103465320