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

    • CountDownLatch

      一组线程等待其他的线程完成工作以后在执行;

      await方法用来等待,countDown方法负责计数器的减一;

      计数器必须大于等于0,只是等于0的时候,计数器就是零,调用await方法时不会阻塞当前线程;CountDownLatch不可能重新初始化或修改CountDownLatch对象的内部计数器的值;

     

    • CyclicBarrier

      CyclicBarrier的字面意思是可循环使用的屏障;它要做的事情是,让一组线程到达一个屏障时被阻塞,直至最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行;

      CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier已经到达屏障,然后当前线程阻塞;

      CyclicBarrier(int parties, Runnable barrierAction),屏障开放,barrierAction定义的任务会执行;

     

    • CountDownLatch和CyclicBarrier区别

      CountdownLatch放行由外部调用countDown次数控制,CyclicBarrier放行由一组线程内部控制(调用await(方法))

      CountDownLatch的计数器只能使用一次,而CyclicBarrier得计数器可以使用reset()方法重置,CyclicBarrier可处理更复杂得业务场景;

     

    • Semaphore

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

      Semaphore的构造方法Semaphore(int permits) 接受一个整型数字,表示可用的许可证数量;Semaphore(10)表示允许10个线程获取许可证,也就是最大并发数为10;acquire()方法获取一个许可证,如果当前没有可用的许可证,则会阻塞直到有可用的许可证为止;tryAcquire()方法是尝试获取许可证,不会阻塞;

     

    • Exchanger

      Exchanger是一个用于线程间协作的工具类,用于进行线程间的数据交换;它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange()方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将生产出来的数据传递给对方;

  • 相关阅读:
    poj 2112
    写给学大计python的同学的查错方法
    [Win32 API学习] Edit,ListBox的用法,字体的设置
    [Win32 API] FindFirstFile()和FindNextFile()
    初探C++ win32 api——Hello world!
    [学习笔记]舞蹈链(DLX)(C++指针版)
    2020科大回归记
    SCOI2019AFO记
    [学习笔记]动态动态规划/动态DP/DDP
    BZOJ5343[CTSC2018]混合果汁(二分答案+主席树)
  • 原文地址:https://www.cnblogs.com/coder-zyc/p/12695266.html
Copyright © 2011-2022 走看看