参考:
https://blog.csdn.net/coderinchina/article/details/54914852
常用:
CountDownLatch
semaphore
1.CountDownLatch是一个同步计数器
用于多个线程之间的同步计数,比如一个主线程要做n件事情,可以吧同步计数器传递给要做这些事情的子线程,子线程完成了,则计数器减1,主线程中计数器等待完成,则主线程返回结果,或者从子线程中获取他们的值。
2.Semaphore
控制某个资源的并发访问数量。
semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.这个跟队列有点像,画图理解更直观
acquire():获取一个许可证,
release():释放许可证,这时候有多余的线程就加入到线程池中
tryAcquire():尝试获取许可证
intavailblePermits():返回此信号量当前可用的许可证数
intgetQueueLength():返回正在等待获取许可证的线程数
hasQueuedThreads():是否有线程正在等待获取许可证
reducePermits(int reduction):减少reduction个许可证,
getQueueThreads():返回所有等待获取许可证的线程集合
Semaphore类的构造函数中传入的数,表示同时并发访问控制在多少个线程
3.Exchanger
exchanger是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,二个线程可以交换彼此的数据.在这二个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当二个线程都达到同步点时,这二个线程就可以交换数据,将本线程生产出来的数据传递给对方
4.CyclicBarrier
CyclicBarrierr如果你在翻译的话是关卡,栅栏的意思,也就是被卡住在哪里,还可以把这个词扯开成cyclic和barrier,cyclic是循环的意思,barrier是障碍的意思,从字面意思连起来读就是可循环的障碍,翻译成java语言就是当有几个线程同时去访问,要阻塞,直到最后一个线程达到屏障时,程序才会继续执行,
CyclicBarrier使用也很简单,首先它有2个构造函数:
public CyclicBarrier(int parties):parties