Document

CountDownLatch在多线程统计另一个线程的动向

CountDownLatch

CountDownLatch类里面有两个方法
一个是await()字面意思是等待的一次,他和sleep()方法的区别就是sellp()会自己醒过来,而await()方法需要另一个方法来唤醒,就是countDown()。

演示代码

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

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/10/01/8:37
 * @Version
 * @Description 门闩案例
 */
public class T3 {
    CountDownLatch latch = new CountDownLatch(1);

    List<String> list = new ArrayList<>();

    void add(){
        String name = Thread.currentThread().getName();
        System.out.printf("%s线程启动...",name);
        while (true){
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            String time = "tiem"+list.size();
            list.add(time);
            if (list.size() == 5)latch.countDown();
            System.out.println(time);
            // if (list.size()>9){
            //     break;
            // }
        }

    }
    void cheak(){
        String t = Thread.currentThread().getName();
        System.out.printf("%s线程启动",t);
        try {
            latch.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.printf("%s线程:到第五个元素了%n",t);
    }

    public static void main(String[] args) {
        T3  t = new T3();
        new Thread(t::add,"工作").start();
        new Thread(t::cheak,"统计").start();
    }
}

两个线程同时同时开始cheak这个线程执行到latch.await()这个方法时会停止,等待唤醒,而add方法会判断执行latch.await()来唤醒await;

效果图

在这里插入图片描述

posted @   一蓑烟雨任平生。。  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
Document
点击右上角即可分享
微信分享提示