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

    CountDownLatch

    • CountDownLatch是一种java.util.concurrent包下一个并发工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。
    • 可以控制线程的执行顺序

    例子:学校操场的跑道上8位选手首先进行1000米赛跑,跑完裁判清空跑道进行跨栏比赛。

    结果:

    总结

    • CountDownLatch end = new CountDownLatch(N); //构造对象时候 需要传入参数N
    • end.await()  能够阻塞线程 直到调用N次end.countDown() 方法才释放线程
    • end.countDown() 可以在多个线程中调用  计算调用次数是所有线程调用次数的总和

     CyclicBarrier-栅栏

    • 栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。
    • CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏将被重置以便下次使用。

    CyclicBarrier跟countDownLatch的区别

    • CountDownLatch一般用于某个线程等待若干个其他线程执行完任务之后,它才执行;不可重复使用
    • CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;可重用的

    例子:学校操场的跑道上8位选手进行1000米赛跑,只有当8位选手都到起跑线上,才能进行比赛

     结果:

       另一种构造函数:

     到达某种状态时,执行Runnable的run()。

    Semaphore--信号量

    • 控制并发数量
    • 常用于限制可以访问某些资源的线程数量,例如通过 Semaphore 限流
    • Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的synchronized 关键字是实现不了的

    构造函数

       fair表示公平实现和非公平实现

     结果:

     因为设置的信号量控制数为5,所以当代码执行到Thread-3开始执行之后休眠5秒,再去执行其他的线程。

     Exchanger

    • 用于交换数据
    • 它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。因此使用Exchanger的重点是成对的线程使用exchange()方法,当有一对线程达到了同步点,就会进行交换数据。因此该工具类的线程对象是【成对】的。

     结果:

    源代码地址:https://github.com/woxbwo/is-concurrent

     

  • 相关阅读:
    一:多线程--多线程简单介绍
    五:网络--多线程断点下载
    四:网络--NSURLConnection基本使用
    三:网络--数据安全/加密
    二:网络--GET请求和POST请求
    一:网络--HTTP协议
    源代码管理工具GIT
    MyBatis 多参问题
    jquery 事件
    jquery点击事件
  • 原文地址:https://www.cnblogs.com/woxbwo/p/11462732.html
Copyright © 2011-2022 走看看