当前位置: 首页 > news >正文

多线程并行

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

示例

在这里插入图片描述

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();}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 水库大坝安全预警系统的创新与应用
  • 职场那些事:应对施暴者的智慧
  • 代码随想录训练营 Day36打卡 动态规划 part04 1049. 最后一块石头的重量II 494. 目标和 474. 一和零
  • 流动会场:声音与空间完美融合,重新定义城市多功能场所—轻空间
  • 虚拟化平台kvm架构 部署kvm虚拟化平台
  • OpenCV几何图像变换(3)计算透视变换矩阵函数getPerspectiveTransform()的使用
  • Nginx源码安装与进阶负载均衡
  • SSH 隧道方式连接 MySQL 服务器
  • 元数据管理gravitino学习
  • C++笔记---类和对象(下)
  • css高级
  • Unity求向量和平面的交点
  • leetcode 括号类型题解
  • 常见分布式ID解决方案的优缺点
  • 什么是多组学整合
  • 时间复杂度分析经典问题——最大子序列和
  • Fastjson的基本使用方法大全
  • HTTP请求重发
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Javascript基础之Array数组API
  • JAVA之继承和多态
  • MySQL几个简单SQL的优化
  • mysql中InnoDB引擎中页的概念
  • nodejs调试方法
  • opencv python Meanshift 和 Camshift
  • Python语法速览与机器学习开发环境搭建
  • use Google search engine
  • Vue.js源码(2):初探List Rendering
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从零开始在ubuntu上搭建node开发环境
  • 简单易用的leetcode开发测试工具(npm)
  • 漂亮刷新控件-iOS
  • 前端学习笔记之观察者模式
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 原生js练习题---第五课
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​补​充​经​纬​恒​润​一​面​
  • #includecmath
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (七)Activiti-modeler中文支持
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十六)一篇文章学会Java的常用API
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .NET 中创建支持集合初始化器的类型
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @EnableWebMvc介绍和使用详细demo
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @在php中起什么作用?