首页 > 其他分享 >CountDownLatch在多线程统计另一个线程的动向

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

时间:2022-10-01 09:11:08浏览次数:38  
标签:latch await list 线程 CountDownLatch new 多线程

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 [email protected]
 * @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;

效果图

在这里插入图片描述

标签:latch,await,list,线程,CountDownLatch,new,多线程
From: https://www.cnblogs.com/xhlin/p/16746745.html

相关文章

  • Java SE 宋红康 days02-高级篇-多线程
    1.进程和线程进程是程序的一次执行过程,或是正在运行的一个程序;是动态的过程,有它自身的产生、存在和消亡的过程(生命周期)进程作为资源分配的单位,系......
  • 一文搞懂进程、线程、协程
    前言操作系统的主要目标是执行用户程序,但也需要顾及内核之外的各种系统任务。系统由一组进程组成:操作系统进程执行系统代码,用户进程执行用户代码。问题:为什么需要进程?早期......
  • java多线性--线程创建
    java多线性--线程创建什么是多线程:不同的功能同时进行Process(进程)与Thread(线程)进程是执行程序的一次执行过程,是一个动态的概念。是系统分配资源的单位。一个进程分为......
  • java 输出hello world 会有几个线程
    先直接说结论五个或者6个测试代码如下点击查看代码ThreadMXBeanbean=ManagementFactory.getThreadMXBean();System.out.println("helloworld:"+bean.getTh......
  • SpringBoot项目中自定义线程池与异步调用案例
    SpringBoot项目中自定义线程池与异步调用案例一、自定义线程池1、配置文件server:port:9006#线程池配置参数task:pool:corePoolSize:10#设置核心线程......
  • 多线程
    简介当考虑一些复杂的过程时,我们称之为工作流,它的各个部分可能会以不同的方式运行。有时行动一个接一个地进行,有时它们以随机的顺序相互重叠,有时事情同时并行。工作流可......
  • Java线程池
    Java线程池线程池的执行过程当向线程池提交一个新的任务,线程池首先判断核心线程池的线程是否都在执行任务。如果不是,创建一个新的工作线程来执行任务。如果核心线程的......
  • 避坑!SimpleDateFormat不光线程不安全,还有这个隐患
    众所周知,SimpleDateFormat是多线程不安全的下面这段代码通过多线程使用同一个SimpleDateFormat对象的parse方法,多次执行代码来测试,可以看到会出现两种预想不到的现象----......
  • java 多线程
    线程的状态:New、Runnable、Blocked、Waiting、Timedwaiting、Terminated  newThread()——>New、start()——>Runnable、等待资源——>Blocked、wait()——>waiting......
  • 多线程同步与互斥
    1.互斥#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#include<errno.h>pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;intlock_v......