Java中的并发工具类

一、CountDownLatch
  CountDownLatch是JDK并发包中提供的一个工具类,CountDownLatch的构造函数接受一个int类型的参数作为计数器,通过调用CountDownLatch提供的countdown方法,可以使计数器减1,他提供了一个await方法用来阻塞当前线程,当计数器的值为0,就恢复正常,示例代码如下。
Java中的并发工具类_第1张图片
  输出结果: CountDownLatchTestThread-1 \n CountDownLatchTestThread-2 \n main或者CountDownLatchTestThread-2 \n CountDownLatchTestThread-1 \n main
二、CyclicBarrier
  CyclicBarrier提供了2个构造方法,第一个是CyclicBarrier(int parties),parties参数是代表拦截的线程数量。第二个构造方法是CyclicBarrier(int parties,Runnable barrierAction),第一个参数同上,第二个参数是CyclicBarrier到达屏障(同步点)优先执行的Runnable,这个Runnable将会由上一个到达屏障(同步点)的线程执行。
Java中的并发工具类_第2张图片
  输出结果 : cyclicBarrierTestThread-1 \n cyclicBarrierTestThread-1 \n main。
CyclicBarrier和CountDownLatch的区别是CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset方法重置。并且CyclicBarrier提供了getNumberWaiting方法获得阻塞线程的数量,也提供了isBroken方法来了解线程是否已经被中断,所以CyclicBarrier可以处理更复杂的业务场景。
三、Semaphore
  Semaphore(信号量)是用来控制同时访问特定资源的线程数量,适合做流量控制,有些类似令牌桶意思,先去获取令牌,用完之后归还令牌。
  核心方法如下:
  (1)acquire():获取一个许可。
  (2)release():归还一个许可。
  (3)int availablePermits():返回此信号量中当前可用的许可证数。
  (4)int getQueueLength():返回正在等待获取许可证的线程数。
  (5)boolean hasQueuedThreads():是否有线程正在等待获取许可证。
  (6)void reducePermits(int reduction):减少reduction个许可证,是个protected方法。
  (7)Collection getQueuedThreads():返回所有等待获取许可证的线程集合,是个protected方法。
  该工具类比较简单,就不提供示例代码了。
四、Exchanger
  Exchanger工具类用于线程之间协作,它提供了一个同步点,在这个同步点两个线程可以交换彼此的数据,核心方法是exchanger,当第一个线程调用这个方法是会一直等待,直到另外一个线程到达同步点,然后交换数据执行(exchanger可以添加一个最大等待时长参数)。下面提供一个示例:
Java中的并发工具类_第3张图片
  输出结果:
  Thread:main exchangeMsg:test1
  Thread:ExchangerTestThread exchangeMsg:test2

个人博客地址:http://xuyangyang.club(点击打开)

微信订阅号:
Java中的并发工具类_第4张图片

你可能感兴趣的:(Java并发编程)