JUC大三常用的辅助类

简介: JUC大三常用的辅助类

  1. JUC大三常用的辅助类

CountDownLatch

CountDownLatch是用来计数的 是一个减法计数器

 允许一个或者多个线程等待直到在其他线程中执行的一组操作完成的同步操作

它主要有两个方法


//通过new直接创建  需要一个参数:总数
CountDownLatch countDownLatch = new CountDownLatch(5);
//倒数-1
countDownLatch.countDown(); 
//等待计数器归零,然后再向下执行  需要抛异常
countDownLatch.await();


例子:5个线程执行,等全部执行完了,可以进行关闭


首先看下没有执行等待的结果  发现不进行等待,每次线程还没走完,就被关在外面了


package com.wyh.JUCUtil;
import java.util.concurrent.CountDownLatch;
/**
 * @program: JUC
 * @description: 计数器 减
 * @author: 魏一鹤
 * @createDate: 2022-02-18 19:53
 **/
//CountDownLatch本质是减法一个计数器
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
 //创建CountDownLatch 需要传递一个参数 总数
        //必须要执行任务的时候 再使用!
        CountDownLatch countDownLatch = new CountDownLatch(5);
//5个线程
        for (int i = 1; i <= 5; i++) {
new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "走了");
 countDownLatch.countDown(); //倒数-1
            },String.valueOf(i)).start();
        }
        System.out.println("关门");
    }
}


1走了

关门

3走了

2走了

5走了

4走了


然后是进行等待的结果 发现如我们想要的一样,每次只有线程走完 才会进行关闭,不会出现线程没走完进行关闭的情况




package com.wyh.JUCUtil;
import java.util.concurrent.CountDownLatch;
/**
 * @program: JUC
 * @description: 计数器 减
 * @author: 魏一鹤
 * @createDate: 2022-02-18 19:53
 **/
//CountDownLatch本质是一个减法计数器
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
 //创建CountDownLatch 需要传递一个参数 总数
        //必须要执行任务的时候 再使用!
        CountDownLatch countDownLatch = new CountDownLatch(5);
//5个线程
        for (int i = 1; i <= 5; i++) {
new Thread(()->{
                System.out.println(Thread.currentThread().getName() + "走了");
 countDownLatch.countDown(); //倒数-1
            },String.valueOf(i)).start();
        }
  //等待计数器归零,然后再向下执行  需要抛异常
        countDownLatch.await();
        System.out.println("关门");
    }
}


1走了

2走了

3走了

5走了

4走了

关门


原理:

首先需要知道 countDownLatch主要使用两个方法


1  countDownLatch.countDown(); //倒数-1 
2  countDownLatch.await(); //等待计数器归零,然后再向下执行 需要抛异常

每次有线程调用countDown()方法,就会使数量-1,调用这个方法是不会阻塞的,假设计数器变为0,那么await()方法就会被唤醒,继续执行

目录
相关文章
|
SQL 存储 运维
盘点MySQL的八大日志,你知道哪些?
盘点MySQL的八大日志,你知道哪些?
221 0
盘点MySQL的八大日志,你知道哪些?
|
关系型数据库 MySQL 数据库
在Windows Vista上安装Ruby on Rails和配置MySQL
 安装Ruby On Rails  1. 下载Ruby,我用的是1.8.6,下载地址:http://rubyforge.org/frs/?group_id=167。下载后直接双击安装就可以了。  2. 在命令行窗口中,运行gem命令,看是否已经包含了rubygems。
1032 0
|
8天前
|
云安全 监控 安全
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1449 8
|
7天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
478 11
|
19天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1259 43