JUC提供的几种线程之间协作的工具类

2020-12-17 01:08

阅读:657

标签:ase   循环   bar   一个   ble   运动员   over   get   one   

目录
  • CountDownLatch 倒计时门闩
  • CyclicBarrier 循环珊栏
  • Semaphore 信号量
  • Condition 条件对象


CountDownLatch 倒计时门闩

    /**
     * CountDownLatch不能被重用, 如果需要重新计数, 可以考虑CyclicBarrier
     * all wait for onw, 如多个运动员等待裁判员鸣枪, 比赛开始
     * one wait for all, 如等待所有运动员到达终点, 比赛结束
     */
    @Test
    public void testCountDownLatch() throws InterruptedException {
        int size = 10;
        final CountDownLatch end = new CountDownLatch(size);
        final CountDownLatch begin = new CountDownLatch(1);
        for (int i = 0; i 

CyclicBarrier 循环珊栏

    /**
     * 等待固定线程到达了珊栏位置, 所有线程才能继续向下执行
     * 类似于在等待所有人都到齐后, 大家才开始讨论工作
     * 

* CyclicBarrier的对象是一个一个的线程 * CountDownLatch则是一个又一个的事件 */ @Test public void testCyclicBarrier() throws InterruptedException { int num = 3; CyclicBarrier cyclicBarrier = new CyclicBarrier(num); LOGGER.info("等待第一次讨论"); for (int i = 0; i

Semaphore 信号量

    @Test
    public void testSemaphore() throws InterruptedException {
        // true参数表示是否公平, 默认是非公平
        final Semaphore semaphore = new Semaphore(3, true);
        for (int i = 0; i 

Condition 条件对象

    /**
     * Condition的signal方法必须在持有锁的情况下才能执行
     */
    @Test
    public void testCondition() throws InterruptedException {
        ReentrantLock lock = new ReentrantLock();
        Condition condition = lock.newCondition();

        for (int i = 0; i 

JUC提供的几种线程之间协作的工具类

标签:ase   循环   bar   一个   ble   运动员   over   get   one   

原文地址:https://www.cnblogs.com/plumswine/p/14118324.html


评论


亲,登录后才可以留言!