zoukankan      html  css  js  c++  java
  • Java中的并发工具类

    1、等待多线程完成的CountDownLatch        

    CountDownLatch允许一个或多个线程等待其他线程完成操作。join用于让当前执行线程等待join线程执行结束。其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远等待。直到join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()方法是在JVM里实现的。

    2、同步屏障CyclicBarrier                            

    CylicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

    CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置。所以CyclicBarrier能处理更为复杂的业务场景。例如,如果计算发生错误,可以重置计数器,让线程重新执行一次。

    3、控制并发线程数的Semaphore                  

    Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。

    Semaphore可以用于流量控制,特别是公用资源有限的应用场景,比如数据库连接。

    Semaphore的用法:首先线程使用Semaphore的acquire()方法获取一个许可证,使用完之后调用release()方法归还许可证。还可以用tryAcquire()方法尝试获取许可证。

    4、线程间交换数据的Exchanger                    

    Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。分别调用exchange()方法。

    Exchanger可以用于遗传算法,校对工作。

  • 相关阅读:
    四则运算
    读书计划
    典型用户和场景分析
    课堂练习--电梯调度
    重力解锁--用户需求调研
    书籍促销活动优惠问题
    小组开发项目--NABC分析
    梦断代码读后感之终结篇
    结对开发-求环状二维数组最大子数组
    结对开发之大数溢出
  • 原文地址:https://www.cnblogs.com/fankongkong/p/7291404.html
Copyright © 2011-2022 走看看