JAVA 100道题(24)

24.使用Java的线程池(ExecutorService)执行一组任务。

在Java中,ExecutorService是一个用于管理和控制线程的工具,它允许你提交任务给线程池来异步执行。下面是一个使用ExecutorService来执行一组任务的简单示例:

 

java复制代码

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交多个任务给线程池执行
for (int i = 0; i < 10; i++) {
final int taskId = i;
executorService.submit(() -> {
System.out.println("Task " + taskId + " is running on thread " + Thread.currentThread().getName());
// 模拟任务执行耗时
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskId + " completed.");
});
}
// 关闭线程池,不再接受新任务,等待所有任务完成
executorService.shutdown();
try {
// 等待所有任务完成,或者超时后退出
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
// 如果超时,可以取消所有未完成的任务
executorService.shutdownNow();
}
} catch (InterruptedException e) {
// 如果等待过程中线程被中断,也取消所有未完成的任务
executorService.shutdownNow();
}
}
}

在这个例子中,我们首先使用Executors.newFixedThreadPool(5)创建了一个固定大小为5的线程池。然后,我们循环提交了10个任务给线程池执行。每个任务都是一个Runnable的匿名内部类实例,它重写了run方法以定义任务的具体执行逻辑。

在任务中,我们打印了当前任务的ID和正在执行该任务的线程名称,然后模拟了任务执行耗时(通过TimeUnit.MILLISECONDS.sleep(500)让当前线程睡眠500毫秒)。任务完成后,我们再打印一条任务完成的消息。

最后,我们调用executorService.shutdown()来关闭线程池,它表示线程池不再接受新的任务,但是会等待所有已提交的任务执行完成。然后,我们使用awaitTermination方法来等待所有任务完成,或者等待指定的超时时间后退出。如果在等待过程中线程被中断,或者在超时后仍有未完成的任务,我们调用shutdownNow()来尝试取消所有未完成的任务。

请注意,shutdownNow()方法会尝试停止所有正在执行的任务,但并不能保证所有任务都能被成功停止。它返回一个列表,包含那些未被成功停止的任务。在实际应用中,你可能需要根据具体需求来处理这些未被停止的任务。

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

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

相关文章

on-my-zsh 命令自动补全插件 zsh-autosuggestions 安装和配置

首先 Oh My Zsh 是什么? Oh My Zsh 是一款社区驱动的命令行工具&#xff0c;正如它的主页上说的&#xff0c;Oh My Zsh 是一种生活方式。它基于 zsh 命令行&#xff0c;提供了主题配置&#xff0c;插件机制&#xff0c;已经内置的便捷操作。给我们一种全新的方式使用命令行。…

热门IT【视频教程】-华为/思科/红帽/oracle

华为认证 网络工程师-入门基础课&#xff1a;华为HCIA认证课程介绍-CSDN博客 网络工程师进阶课&#xff1a;华为HCIP认证课程介绍-CSDN博客 职场进阶&#xff0c;踏上高峰——HCIE-Datacom认证-CSDN博客 华为HCIA试听课程 &#xff1a; 超级实用&#xff0c;华为VRP系统文件…

8.6 循环神经网络的简洁实现

每个步长共用参数 加载数据 虽然 8.5节 对了解循环神经网络的实现方式具有指导意义&#xff0c;但并不方便。 本节将展示如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from…

#include<初见C语言之指针(5)>

目录 一、sizeof和strlen的对比 1. sizeof 2.strlen 二、数组和指针题解析 1. ⼀维数组 1.1数组名理解 2.字符数组 3. ⼆维数组 三、指针运算题解析 总结 一、sizeof和strlen的对比 1. sizeof 我们前面介绍过sizeof是单目操作符 sizeof括号中有表达式&#xff0c;不…

解决PATH变量污染的问题

文章目录 解决PATH变量污染的问题概述笔记清空PATH变量之后的系统设置在命令行查看清空后的PATH变量以 gitea-1.17.1-gogit-windows-4.0-amd64.exe 为例以系统命令 where为例run_vs2019.bat备注 - 批处理的后缀最好是batEND 解决PATH变量污染的问题 概述 随着不断安装新软件,…

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

前言 非线性薛定谔方程(Nonlinear Schrdinger Equation, NLS)是量子力学中描述波函数演化的一个重要方程,特别是在考虑介质的非线性效应时。它是薛定谔方程的一种推广形式,可以用于描述非线性介质中光波或量子粒子的传播,如光纤通信、玻色-爱因斯坦凝聚以及非线性光学等领…

一文彻底搞懂如何创建线程

文章目录 1. java创建线程(Thread)方式2. 继承 Thread 类3. 实现 Runnable 接口4. 实现 Callable 接口5. 使用线程池6. 使用匿名类 1. java创建线程(Thread)方式 方式一&#xff1a;继承于Thread类&#xff0c;这是最常见的创建线程的方式之一&#xff0c;通过继承 Thread 类并…

SAP GBB中Transaction Key 都代表何种业务过账?

【GBB】offsetting entry 用于IM过账的库存冲销分录。依据为移动类型科目分组中的科目修改分配移动类型。 如下科目分组应在标准系统中定义。可以直接使用。 你也可以定义自己的移动类型科目分组。 涉及到的SAP 标准科目修改&#xff08;一般修改&#xff09;如下&#xff1a…

BeanDefinition

这里写目录标题 BeanDefinitionBeanDefinitionReaderAbstractBeanDefinitionReaderXmlBeanDefinitionReader BeanDefinition 上述Spring的基本运行中&#xff0c;你所有的定义描述信息都在XML文件里面&#xff0c;如何读取呢&#xff1f; 当然通过 new ClassPathXmlApplicatio…

无符号整型数0减1

无符号数0减1等于多少&#xff1f; 对于无符号整数来说&#xff0c;0是最小值&#xff0c;一般不能再减1了。因为无符号整数不能表示负数&#xff0c;当无符号数再减1时&#xff0c;会发生下溢&#xff0c;即最高位变为1&#xff0c;最低位变为0&#xff0c;结果变成一个非常大…

常见微服务的组件?

注册中心&#xff1a;就是一个服务注册的地方&#xff0c;我们可以把拆分的服务注册到注册中心&#xff0c;这样注册中心就能管理这些服务&#xff0c;服务之间的调用就会很方便&#xff0c;通过服务名就能相互调用。 负载均衡&#xff1a;被调用放的负载均衡&#xff0c;比如…

【智能算法】黄金正弦算法(GSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;Tanyildizi等人受到正弦函数单位圆内扫描启发&#xff0c;提出了黄金正弦算法&#xff08;Golden Sine Algorithm, GSA&#xff09;。 2.算法原理 2.1算法思想 GSA来源于正弦函…

FreeBSD下路由问题留档

碰到了一个非常神奇的事情&#xff0c;一台笔记本有以太网和wifi&#xff0c;都可以连到同一台路由器&#xff0c;ip地址配置在同一网段&#xff0c;但是如果插上网线&#xff0c;再拔掉网线的话&#xff0c;那么wifi即使连上&#xff0c;也无法上网。 看路由信息&#xff0c;发…

【Spring源码分析】透过源码看透Spring事务

阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系列接口解读【Spring源码分析】执行流程之非懒加载单例Bean的实例化逻辑【Spring源码分析】从源码角度去熟悉依赖注入&#xff08;一&#xff09;【Spring源码分析】…

书生浦语笔记一

2023年6月&#xff0c;InternLM的第一代大模型正式发布。仅一个月后&#xff0c;该模型以及其全套工具链被开源。随后&#xff0c;在8月份&#xff0c;多模态语料库chat7B和lagent也被开源。而在接下来的9月份&#xff0c;InternLM20B的开源发布进一步加强了全线工具链的更新。…

所有企业都在用的微服务框架,需要多强的服务集成能力?

在数字化时代&#xff0c;随着业务规模的扩大和系统复杂性的增加&#xff0c;传统的单体应用架构由于其固有的局限性&#xff0c;已无法高效支撑企业日益增长的业务需求。 为了突破这一瓶颈&#xff0c;微服务架构以其独特的优势崭露头角&#xff0c;逐渐成为企业数字化转型的…

腾讯云容器与Serverless的融合:探索《2023技术实践精选集》中的创新实践

腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践 文章目录 腾讯云容器与Serverless的融合&#xff1a;探索《2023技术实践精选集》中的创新实践引言《2023腾讯云容器和函数计算技术实践精选集》整体评价特色亮点分析Serverless与Kubernetes的…

Java学习36-Java 多线程安全:懒汉式和饿汉式

JAVA种有两种保证线程安全的方式&#xff0c;分别叫懒汉式Lazy Initialization和饿汉式Eager Initialization&#xff0c;以下是他们的区别&#xff1a; 线程安全性&#xff1a; 懒汉式本身是非线程安全的&#xff0c;因为多个线程可能同时检查实例是否为null&#xff0c;并尝…

【刷题】 二分查找入门

送给大家一句话: 总有一天&#xff0c;你会站在最亮的地方&#xff0c;活成自己曾经渴望的模样—— 苑子文 & 苑子豪《我们都一样 年轻又彷徨》 二分查找入门 1 前言2 Leetcode 704. 二分查找2.1 题目描述2.2 算法思路 3 Leetcode 34. 在排序数组中查找元素的第一个和最后…

学习笔记——C语言基本概念指针(下)——(8)

1.指针和数组 数组指针 -- 指向数组的指针。 指针数组 -- 数组的元素都是指针。 换句话理解就是&#xff1a;数组指针就是个指针&#xff0c;指针数组就是个数组。 1.1数组指针 数组指针&#xff1a;指向数组的指针&#xff1b; 先回顾一下数组的特点&#xff1a; 1.相…