美文网首页
基于CAS的一些锁(2)- CountDownLatch

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

作者: silence_J | 来源:发表于2020-05-07 22:06 被阅读0次

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

CountDownLatch主要有三个方法:

  • countDown() 执行倒数
  • await() 阻塞等待,相当于门闩,countDown到0时门闩打开。
  • await(2, TimeUnit.SECONDS) 可设置最长等待时间,超时后若还没countDown到0,门闩自动打开
public class T02_CountDownLatch {

    public static void main(String[] args) {
        Thread[] threads = new Thread[10];

        CountDownLatch latch = new CountDownLatch(threads.length);

        for (int i = 0; i < threads.length; i++) {
            threads[i] = new Thread(() -> {
                try {
                    TimeUnit.SECONDS.sleep(5);
                    System.out.println(Thread.currentThread().getName() + " end");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                latch.countDown();
            });
        }

        for (int i = 0; i < threads.length; i++) {
            threads[i].start();
        }

        try {
            latch.await();
            // 可设置最长等待时间
            // 超时后若还没countDown到0,门闩自动打开
            // latch.await(2, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("end latch");
    }

}

join也可以实现类似功能为什么用CountDownLatch?
用join不好控制,必须要等join线程结束才能继续执行当前线程。而用CountDownLatch门闩时可以自由控制门闩什么时候打开,更加灵活方便。

相关文章

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

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

  • 多线程与高并发知识点简述

    CAS和Atomic包 CAS操作流程: JDK5之后发布了基于乐观锁思想的自旋锁(无锁)java.util.co...

  • go RWMutex源码解析

    RWMutex 基于go 1.13源码总的来说读写锁就是利用互斥锁和CAS维护2个关于读锁的变量以及runtime...

  • 原子操作

    无锁 通过CAS+volatile来实现 CAS特点 基于乐观锁设计,不怕修改共享变量,修改了也没事,继续等待就可...

  • 锁的总结

    序号锁名称应用实例1乐观锁CAS2悲观锁synchronized、vector、hashtable3自旋锁CAS4...

  • java中的锁(一)

    java 锁 源码看 github java 中的锁,宏观上分为乐观锁和悲观锁乐观锁:读多写少,都是基于CAS实现...

  • Thread

    Volatile CAS Lock相对synchronized块的优势 CountDownLatch、Cyclic...

  • 基于CAS的一些锁(1)- ReentrantLock

    synchronized的可重入性 如果一个同步方法m1中调用了另一个同步方法m2,并且这两个方法加的是同一把锁。...

  • 基于CAS的一些锁(3)- CyclicBarrier

    这个同步工具CyclicBarrier直译为循环栅栏。立一个栅栏挡在前面,后面人满后把栅栏打开放行,再关闭栅栏,如...

  • 基于CAS的一些锁(7)- Exchanger

    Exchanger 交换器,用于两个线程之间交换数据。 可以把exchanger想象成一个容器,这个容器有两个值,...

网友评论

      本文标题:基于CAS的一些锁(2)- CountDownLatch

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