我的应用我做主:扩展线程池

2023-12-22 23:44
文章标签 线程 应用 扩展 做主

本文主要是介绍我的应用我做主:扩展线程池,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自定义线程创建:ThreadFactory
线程池中的线程是从哪里来的呢?
ThreadPoolExecutor(int corePoolSize,//指定了线程池种的线程数量
int maximumPoolSize,//指定了线程池中的最大线程数量。
long keepAliveTime,// 当线程池数量超过了corePoolSize,多余的空闲线程的存活时间,即超过corePoolSize的空闲线程,在多长时间内会被销毁。
TimeUnit unit,//keepAliveTime的单位
BlockingQueue<Runnable> workQueue,//任务队列,被提交尚未被执行的任务。
ThreadFactory threadFactory,//线程工厂,用于创建线程,一般用默认的即可。
RejectedExecutionHandler handler)// 拒绝策略,当任务太多来不及处理,如何拒绝任务。

public class ExtThreadPool {public static class MyTask implements Runnable{public String name;public MyTask(String name){this.name = name;}@Overridepublic void run() {System.out.println("正在执行" + ":Thread ID:" + Thread.currentThread().getId()+ ",Task Name=" + name);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {ExecutorService es = new ThreadPoolExecutor(5,5,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()){@Overrideprotected void beforeExecute(Thread t,Runnable r){System.out.println("准备执行"+((MyTask) r).name);}@Overrideprotected void afterExecute(Runnable r,Throwable t){System.out.println("执行完成"+((MyTask) r).name);}@Overrideprotected void terminated(){System.out.println("线程退出");}};for(int i=0;i<5;i++){MyTask task = new MyTask("Task");es.execute(task);try {Thread.sleep(10);} catch (InterruptedException e) {throw new RuntimeException(e);}}es.shutdown();}
}

比如:监控每个任务执行的开始时间和结束时间,或者其他一些自定义的增强功能,这时候该怎么办呢?
一个好消息是:ThreadPoolExecutor是一个可以扩展的线程池,它提供了
beforeExecute(),afterExecute()和terminated()三个接口来对线程池进行控制。

扩展原有线程池,实现了
beforeExecute,afterExecute,terminiate三个方法。
调用shutdown方法关闭线程池,这是一个比较安全的方法
如果当前正有线程在执行,shutdown方法
并不会立即暴力终止所有任务。
它会等待所有任务执行完成后,再关闭线程池。
当它并不会等待所有线程执行完成后再返回。
因此,可以简单地理解成shutdown方法只是发送了一个关闭
信号而已。但在shutdown方法后,这个线程池就不能再接收其他
新的任务了。

这篇关于我的应用我做主:扩展线程池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时