美文网首页
CountDownLatch门闩

CountDownLatch门闩

作者: yongguang423 | 来源:发表于2018-05-04 12:28 被阅读9次

门闩是concurrent包中定义的一个类型,是用于多线程通讯的一个辅助类型。
门闩相当于在一个门上加多个锁,当线程调用await方法时,会检查门闩数量,如果门
闩数量大于0,线程会阻塞等待。当线程调用countDown时,会递减门闩的数量,当门闩数量为0时,await阻塞线程可执行。

/**
 * CountDownLatch 门闩
 */
package com.sxt.concurrent.t02;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class Test_03 {
    public static void main(String[] args) {
        final Test_03_Container t = new Test_03_Container();
        final CountDownLatch latch = new CountDownLatch(1);

        new Thread(new Runnable(){
            @Override
            public void run() {
                if(t.size() != 5){
                    try {
                        latch.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("size = 5");
            }
        }).start();
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i < 10; i++){
                    System.out.println("add Object to Container " + i);
                    t.add(new Object());
                    if(t.size() == 5){
                        latch.countDown();
                    }
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

class Test_03_Container{
    volatile List<Object> container = new ArrayList<>();
    
    public void add(Object o){
        this.container.add(o);
    }
    
    public int size(){
        return this.container.size();
    }
}

相关文章

  • 门闩CountDownLatch

    挂多把锁,当所有的锁都释放掉后 才执行 可以和锁混合使用,或替代锁的功能。 在门闩未完全开放之前等待。当门闩完全开...

  • CountDownLatch门闩

    门闩是concurrent包中定义的一个类型,是用于多线程通讯的一个辅助类型。门闩相当于在一个门上加多个锁,当线程...

  • 【Java并发】了解CountDownLatch

    CountDownLatch latch翻译:门闩; 插销; 碰锁; 弹簧锁; 理解为倒数的门闩(共享锁) 执行结...

  • CountDownLatch详解

    CountDownLatch中count down是倒数的意思,latch则是门闩的含义。整体含义可以理解为倒数的...

  • 多线程门闩CountDownLatch的玩法

    CountDownLatch,一个同步辅助类,在完成特定的操作之前,它让一个或多个线程一直等待, 构造函数:new...

  • 主要并发工具类-CountdownLaunch的使用

    从字面理解 CountDownLatch,意思是倒数门闩。它的作用是多个线程做汇聚。主线程开启了 A、B、C 三个...

  • CountDownLatch闭锁

    1.闭锁作用 Latch中文含义有门闩之意,闭锁的作用相当于一扇门:CountDownLatch能够使一个线程在等...

  • 基于CAS的一些锁(2)- CountDownLatch

    CountDown 倒数 , Latch 门闩。顾名思义是倒数门闩,321倒数完毕门闩打开。 CountDownL...

  • 门闩

    有许多从前常见的东西,现在难得一见,门闩便是其中之一。门闩是从前房屋建造的标配,无论豪宅或茅舍都少不了它,...

  • 门闩

    一位女记者去外地采访,时间很晚了,前不着村,后不见店,只好借宿于一座寺庙。 方丈把女记者带人一间客房:“施...

网友评论

      本文标题:CountDownLatch门闩

      本文链接:https://www.haomeiwen.com/subject/lprdrftx.html