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的用法及作用的主要内容,如果未能解决你的问题,请参考以下文章