Java中的并发工具类 有更新!

Published on with 1,856 views

    一、CountDownLatch
      CountDownLatch是JDK并发包中提供的一个工具类,CountDownLatch的构造函数接受一个int类型的参数作为计数器,通过调用CountDownLatch提供的countdown方法,可以使计数器减1,他提供了一个await方法用来阻塞当前线程,当计数器的值为0,就恢复正常,示例代码如下。
    0b2d2c31156c463d8be973c8831b7f98-bingfatools1.png
      输出结果: 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将会由上一个到达屏障(同步点)的线程执行。
    27dd422c42854ba993888d73b9831657-bingfatools2.png
      输出结果 : 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可以添加一个最大等待时长参数)。下面提供一个示例:
    aa721dd5641943f9ad6ba268cb9d1362-bingfatools3.png
      输出结果:
      Thread:main exchangeMsg:test1
      Thread:ExchangerTestThread exchangeMsg:test2

    CSDN地址:betway必威体育首页-https://www.jmhat.com/qq_36236890

    微信订阅号:
    88df59f179034deb97406ff333e6d3a6-weixin.png

    Responses
    betway必威手机下载-↓