1、Semaphore计数信号量
Semaphore计数信号量维护了一个许可集,用于限制访问某些资源的线程数目,并提供同步机制。
通俗来说,就是可以控制让多个线程拿到许可,拿到许可的线程可以并发管理同一个资源,这些拿到许可的线程可以看做一个整体。
如果是单个信号量的Semaphore对象,就可以实现互斥锁的功能,而且,可以由一个线程获得许可,另一个线程去释放许可。可以应用于死锁恢复的一些场合。
创建信号量对象
第二个构造的第二个参数表示当有一个许可被释放之后,替补的线程是以什么方式去拿到这个许可,如果为true,则表示是公平的,谁先来谁上;false表示是竞争上岗。
让线程获取许可
在线程内调用Semaphore对象的acquire方法,从此信号量中获取一个许可。
让线程释放许可
在线程内调用Semaphore对象的release方法,来释放一个许可。
获取可用的许可数
2、CyclicBarrier
一个同步辅助类,它要求一组线程互相等待,直到全部到达某个公共屏障点。还可以设置全部到齐之后再去做什么事情。
两个构造方法如下:
设置公共屏障点
3、CountDownLatch
类似倒计时计数器,调用CountDownLatch的countDown方法将计数器减1,当计数到达0时,所有等待的线程开始执行。
CountDownLatch类的等待方法
4、Exchanger
用于实现两个线程之间的数据交换。如果有两个线程在完成一定的任务后想与对方交换数据,先拿出数据的线程会保持等待,只有第二个线程拿着数据到来时,才会彼此交换数据。好比交易时一手交钱一手交货。
来源:CSDN
作者:少年啦飞啦
链接:https://blog.csdn.net/caozp913/article/details/103465320