多线程并行

news2024/11/15 4:33:13

多线程并行、所有线程结束后输出任务完成

示例

在这里插入图片描述

package com.fd;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Test3 {
    public static void main(String[] args) throws InterruptedException {
        AtomicInteger counter = new AtomicInteger(0);
        for (int i = 0; i < 20; i++) {
            final int index = i;
            ThreadPoolUtil. execute(() -> {  // 使用 lambda 表达式简化代码
                System.out.println("任务 " + index + "  执行者:  " + Thread.currentThread().getName());

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                synchronized (counter){
                    counter.addAndGet(1);
                    System.out.println("当前为: "+counter.get());
                }

            });
        }
        // 确保所有任务完成
        ThreadPoolUtil. shutdown();
        ThreadPoolUtil.threadPool. awaitTermination(1, TimeUnit.MINUTES);
        System.out.println("所有任务完成" + counter.get());

    }
}

工具类


package com.fd;
import java.util.concurrent.*;

public class ThreadPoolUtil {

    private static final int CORE_POOL_SIZE = 4;
    private static final int MAX_POOL_SIZE = 10;
    private static final int QUEUE_CAPACITY = 100;
    private static final Long KEEP_ALIVE_TIME = 1L;

    public static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
            CORE_POOL_SIZE,
            MAX_POOL_SIZE,
            KEEP_ALIVE_TIME,
            TimeUnit.SECONDS,
            new LinkedBlockingQueue<>(QUEUE_CAPACITY),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );

    /**
     * 提交一个 Runnable 任务到线程池执行
     * @param task 要执行的任务
     */
    public static void execute(Runnable task) {
        threadPool.execute(task);
    }

    /**
     * 关闭线程池
     */
    public static void shutdown() {
        threadPool.shutdown();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构入门】二叉树之堆的实现

文章目录 前言一、树1.1 树的概念1.2 树的相关概念 二、二叉树2.1 二叉树的概念2.2 特殊的二叉树2.3 二叉树的性质 三、堆3.1 堆的概念3.2 堆的性质3.3 堆的存储3.4 堆的实现3.4.1 堆的初始化3.4.2 堆的销毁3.4.1 堆向上调整算法3.4.2 堆向下调整算法3.4.3 堆的创建3.4.4 堆的插…

MT2523AS 原边10瓦无外围方案PCB设计要点

MT2523AS 是自供电原边反馈5V2A(10瓦)电源芯片。MT2523AS 内置功率三极管&#xff0c;采用脉冲频率调制&#xff08;PFM&#xff09;建立非连续导电模式&#xff08;DCM&#xff09;的反激式电源&#xff0c;外围设计极简化。MT2523AS 具有可变原边峰值电流&#xff0c;通过最大…

AI技术在招聘人才笔试测评中的作用

一、引言 在快速变化的商业环境中&#xff0c;企业之间的竞争日益激烈&#xff0c;而人才作为企业发展的核心驱动力&#xff0c;其选拔与培养显得尤为重要。传统的人才招聘流程&#xff0c;尤其是笔试测评环节&#xff0c;往往依赖于人工阅卷、主观判断&#xff0c;不仅效率低…

每日一问:深入理解JVM——结构与类的加载过程解析

每日一问&#xff1a;深入理解JVM——结构与类的加载过程解析 在Java的世界中&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是一个核心概念。它是Java程序能够跨平台运行的基础&#xff0c;负责执行Java字节码&#xff0c;并为Java应用程…

成为Python砖家(3): 何时产生字节码 .pyc 文件

好奇&#xff1a;.pyc和 __pycache__是啥&#xff1f; 你是否好奇&#xff0c;在某些 Python 工程中&#xff0c;当执行了 xxx.py脚本后&#xff0c;多出了 __pycache__目录&#xff1f;这个目录下存放的是一些 .pyc结尾的文件。 这些文件&#xff0c;叫做 python bytecode。 …

电子信息工程专业学习路线的制定与实践

电子信息工程专业是一个多学科交叉、技术更新迅速的领域。对于大学生来说&#xff0c;制定合适的学习路线并有效学习专业知识至关重要。 目录 一、明确学习目标 二、构建知识体系 三、掌握基础知识 四、深入专业课程 五、实践与理论相结合 六、学习编程语言 七、参与科研…

345345

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

数学建模起步感受(赛前15天)

0基础直接上手数模&#xff0c;因为大一&#xff01;年轻就是无所畏惧&#xff01;开个玩笑&#xff0c;因为数模比赛比一年少一年… 抱着不打也是浪费的态度&#xff0c;我开始着手准备 首先python啥也不会&#xff0c;知道有元组这玩意… 仅仅在刷软考题的时候遇到python选择…

[数据集][目标检测]竹子甘蔗发芽缺陷检测数据集VOC+YOLO格式2953张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2953 标注数量(xml文件个数)&#xff1a;2953 标注数量(txt文件个数)&#xff1a;2953 标注…

计算机Java项目|基于SpringBoot的医疗报销系统的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

【深入浅出Docker】【三】Docker容器详解

文章目录 一. Docker容器简介二. Docker容器详解1. 容器vs虚拟机1.1. 虚拟机模型1.2. 容器模型1.3. 虚拟机的额外开销 2. 容器启动过程描述3. 容器进程4. 容器生命周期与文件保存5. 优雅地停止容器&#xff1a;两阶段方式停止并删除容器6. 利用重启策略进行容器的自我修复6.1. …

MobileFormer 网络简介

MobileFormer&#xff1a;一种通过双线桥将 MobileNet 和 Transformer 并行的结构。这种方式融合了 MobileNet 局部性表达能力和 Transformer 全局表达能力的优点&#xff0c;这个桥能将局部性和全局性双向融合。和现有 Transformer 不同&#xff0c;Mobile-Former 使用很少的 …

或许改变整个领域的生态!颜宁团队合作最新Cell子刊

电压门控钠(Nav)和钙(Cav)通道负责电信号的起始。长期以来&#xff0c;它们一直是治疗各种疾病的靶标。来自多种生物的Nav和Cav通道的不同亚型的冷冻电镜(cryo-EM)结构越来越多&#xff0c;需要一个通用的残基编号系统来建立结构-功能关系&#xff0c;并有助于合理的药物设计或…

java(基础)

Arrays.toString 依赖于 java.util.* Pearson出版社 Java优势 1 ) 简单性 2 ) 面向对象 3 ) 分布式 4 ) 健壮性 5 ) 安全性 7 ) 可移植性 可移植性指的是 Java 程序可以在不同的操作系统、硬件平台和设备上运行 8 ) 解释型 9 ) 高性能 10 ) 多线程 11 ) 动态性 6 )…

打字侠支持新世纪五笔、86版五笔、98版五笔打字练习:初学者的最佳选择

在当今数字化时代&#xff0c;打字已经成为我们日常生活和工作中必不可少的一部分。尽管拼音输入法因其易学易用的特点占据了主导地位&#xff0c;但对于那些追求高效打字和提高汉字输入速度的人来说&#xff0c;五笔输入法仍然是一种极具吸引力的选择。无论是新世纪五笔、86版…

C++的发展史及前景

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1. 什么是C2. C的发展史3. C的重要性3.1 C的使…

Linux日常运维-任务计划(crontab)

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 本小章内容就是Linux进阶部分的日常运维部分&#xff0c;掌握这些日常运维技巧或者方法在我们的日常运维过程中会带来很多方…

2024年软件测试经典面试题(全三篇)【包含答案】做完面试进入大厂不是梦

前言 迎来的便是金九银十&#xff0c;一直想着说分享一些软件测试的面试题&#xff0c;这段时间做了一些收集和整理&#xff0c;下面共有三篇经典面试题&#xff0c;大家可以试着做一下&#xff0c;答案附在后面&#xff0c;希望能帮助到大家。 软件测试经典面试题&#xff0…

HTTP协议详细图解(请求报文格式,响应报文格式,get和post的区别,状态码详解)

文章目录 什么是Http协议&#xff1f;HTTP报文格式HTTP 请求格式HTTP响应格式什么是 URL请求和响应中的“方法”GET 和 POST 的区别认识“Header”状态码详解 什么是Http协议&#xff1f; Http协议是“超文本传输协议”&#xff08;不仅可以传输文本&#xff0c;也可以传输图片…

六大桌面管理系统一次性打包分享,寻找最好的桌面管理系统

桌面乱了需要好好整理&#xff0c;不仅看着干净还能迅速找到想要的东西。对于电脑也一样&#xff0c;尤其是员工的电脑桌面&#xff0c;如果不监控&#xff0c;你不知道员工会在电脑上进行什么神奇的操作&#xff0c;也许删除了一个重要文件&#xff0c;也许下载了一个病毒软件…