四种最常见的线程池代码示例

2024-08-30 05:38

本文主要是介绍四种最常见的线程池代码示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;/*** 线程池* newCachedTheadPool 可缓存线程池,如果线程池长度超过处理需要,可以灵活回收空闲线程,若无可回收,则新建线程* newFixedThreadPool 定长线程池,可以控制线程最大并发数,超出的线程会在队列中等待* newScheduledThreadedPool 定长线程池,支持定时及周期性任务* newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行(FIFO,LIFO)*/
public class PoolTest1 {public static void main(String[] args) throws InterruptedException {// 可缓存线程池
//        createCacheThread();// 定长线程池
//        createFixedThread();//  周期线程池
//        createScheduleThread();// 单线程线程池createSingleThread();}/*** 可缓存线程池* 如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。** @throws InterruptedException*/public static void createCacheThread() throws InterruptedException {ExecutorService executorService = Executors.newCachedThreadPool();for (int i = 0; i < 10; i++) {final int temp = i;executorService.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", temp: " + temp);}});// 如果加上sleep,可以更清晰地看到线程池将线程复用了
//            Thread.sleep(1);}}/*** 定长线程池* 可以控制线程的长度,控制线程的最大并发数,超出的线程会在队列中等待*/public static void createFixedThread() {// 可固定长度线程池ExecutorService executorService = Executors.newFixedThreadPool(3);for (int i = 0; i < 20; i++) {final int temp = i;executorService.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", " + temp);}});}}/*** 周期线程池* 可以调用schedule方法,来执行延迟线程* 可以调用scheduleAtFixedRate方法来实现周期性执行线程** @throws InterruptedException*/private static void createScheduleThread() throws InterruptedException {ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);for (int i = 0; i < 20; i++) {Thread.sleep(50);final int temp = i;// 延迟3秒后执行scheduledExecutorService.schedule(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", " + temp);}// 3秒后执行}, 3, TimeUnit.SECONDS);// 每2秒执行一次scheduledExecutorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", " + temp);}// 3秒后执行}, 2,3, TimeUnit.SECONDS);}}/*** 创建单个工作线程的线程池* 1、shutdown() 和 shutdownNow() 的区别* shutdown() 只是关闭了提交通道,用submit()是无效的;而内部该怎么跑还是怎么跑,跑完再停。* shutdownNow() 能立即停止线程池,正在跑的和正在等待的任务都停下了。** 2、shutdown() 和 awaitTermination() 的区别* shutdown() 后,不能再提交新的任务进去;但是 awaitTermination() 后,可以继续提交。** awaitTermination()是阻塞的,返回结果是线程池是否已停止(true/false);shutdown() 不阻塞。*/private static void createSingleThread() {ExecutorService executorService = Executors.newSingleThreadExecutor();for (int i = 0; i < 10; i++) {final int temp = i;// 可执行线程execute方法表示启动线程executorService.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ", " + temp);}});}executorService.shutdown();}
}

上面的方法通过修改main中的注释可以直接运行,代码已亲测没有问题。

这篇关于四种最常见的线程池代码示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119935

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

Python实现阶乘的四种写法

《Python实现阶乘的四种写法》本文主要介绍了Python实现阶乘的六种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录第一种:推导式+循环遍历列表内每个元素相乘第二种:调用functools模块reduce的php累计

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

Go Gorm 示例详解

《GoGorm示例详解》Gorm是一款高性能的GolangORM库,便于开发人员提高效率,本文介绍了Gorm的基本概念、数据库连接、基本操作(创建表、新增记录、查询记录、修改记录、删除记录)等,本... 目录1. 概念2. 数据库连接2.1 安装依赖2.2 连接数据库3. 数据库基本操作3.1 创建表(表关

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍