CountDownLatch的用法及作用

Posted 杀手不太冷!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CountDownLatch的用法及作用相关的知识,希望对你有一定的参考价值。

CountDownLatch的用法及作用

作用

CountDownLatch是线成计数器,能够保证目标线程可以在前面几个线程都执行完毕执行。比如我们在A线程里面调用B线程和C线程,如果我们想要保证必须要在B线程和C线程都执行完之后才能执行A线程,那么我们就可以用CountDownLatch线程计数器来实现。

join方法的作用

多线程中的join方法的作用:使当前所在线程必须要在调用join方法的线程执行完之后才能执行。

比如我们下图中的例子:

使用CountDownLatch线程计数器的示例

我们现在有两个线程concurrentHashMapTest和concurrentHashMapTest2,和一个main主线程,现在我们的目的是:必须要让main线程在前面两个线程执行完毕之后再执行,那么我们需要怎么办呢?如下图:

这里有一点需要注意一下,就是上图中的countDown.await()这句代码,如果计数器的值不等于0,那么main线程会一直阻塞在这句代码的这个地方,但是当线程计数器countDown的值为0的时候,main线程就会被唤醒,就不会阻塞在这个地方了,因此只要线程计数器的值为0,那么你写再多的线程计数器都是没有用的,都不会阻塞。

代码

package com.example.phaser;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;

/**
 * @Author zy.xuan
 * @Date 2022/5/17 18:52
 */
public class JucTest 
    static CountDownLatch countDown = new CountDownLatch(2);
    static ConcurrentHashMap<String,Integer> cur;

    public static void main(String[] args) throws Exception
        cur = new ConcurrentHashMap<>();
        cur.put("one",1);
        ConcurrentHashMapTest concurrentHashMapTest = new ConcurrentHashMapTest();
        concurrentHashMapTest.start();
        ConcurrentHashMapTest concurrentHashMapTest2 = new ConcurrentHashMapTest();
        concurrentHashMapTest2.start();
        countDown.await();
        System.out.println(cur.get("one"));
    


    static class ConcurrentHashMapTest extends Thread
        @Override
        public void run() 
            for(int x=0;x<10000;x++)
                Integer integer = cur.get("one");
                integer++;
                cur.put("one",integer);
            

            countDown.countDown();
        
    


以上是关于CountDownLatch的用法及作用的主要内容,如果未能解决你的问题,请参考以下文章

CountDownLatch用法实践

CountDownLatch用法---等待多个线程执行完才执行

并发编程系列之CountDownLatch用法简介

并发编程系列之CountDownLatch用法简介

多线程编程学习九(并发工具类).

CountDownLatch 用法