ThreadPool使用流程

keepAliveTime只针对大于corePoolSize且小于maximumPoolSize的空闲线程,比如corePoolSize=10,maxPoolSize=20,当前有15个线程在跑着,过段时间有4个线程处于等待状态的时间超过了keepAliveTime指定的时间,则结束掉此4个线程

普通的线程有五个状态:新建,可运行,阻塞,等待,结束。
线程池中的线程只有两个状态:可运行,等待

shutdown,只是遍历池中所有处于等待状态的空闲worker,对他们执行interupter操作
shutdownNow,则遍历池中所有worker线程,执行interupter操作,并返回等待处理的任务列表。

也就是说,虽然执行了shutdown(或shutDownNow),并不一定能够停止运行过程中的线程,只能对他们中断,告知他们,你们的活可以停了,但是具体要不要停,则由线程本身的逻辑来控制,这样做的好处,我觉得是避免了代码逻辑的不完整性,避免破坏代码中可能存在的原子性逻辑。

时间: 2024-11-29 09:17:24

ThreadPool使用流程的相关文章

Java多线程 -- JUC包源码分析11 -- ThreadPoolExecutor源码分析

在JUC包中,线程池部分本身有很多组件,可以说是前面所分析的各种技术的一个综合应用.从本文开始,将综合前面的知识,逐个分析线程池的各个组件. -Executor/Executors -ThreadPoolExecutor使用介绍 -ThreadPoolExecutor实现原理 –ThreadPoolExecutor的中断与优雅关闭 shutdown + awaitTermination –shutdown的一个误区 Executor/Executors Executor是线程池框架最基本的几个接

Ceph源码解析:读写流程

一.OSD模块简介 1.1 消息封装:在OSD上发送和接收信息. cluster_messenger -与其它OSDs和monitors沟通 client_messenger -与客户端沟通 1.2 消息调度: Dispatcher类,主要负责消息分类 1.3 工作队列: 1.3.1 OpWQ: 处理ops(从客户端)和sub ops(从其他的OSD).运行在op_tp线程池. 1.3.2 PeeringWQ: 处理peering任务,运行在op_tp线程池. 1.3.3 CommandWQ:处

Start KBE 01. 注册流程解读

刚刚接触KBE,之前还是信心满满地以为很容易就能学会,但是当一切细节展现在眼前的时候,才发现这样一个庞然大物放在面前,竟然不知道该从何处下手. 与其左顾右盼,犹豫不决还不如看看源码,所谓庖丁解牛,恢恢乎游刃有余. (本文参考的例子是kbengine-0.8.2 + kbengine_cocos2d_js_demo-0.8.0.) 废话少说,就从注册流程开始看起吧,这是最基础也是最简单的一个功能了吧. Step by step,我只分析了简要的流程,并没有做更深入的挖掘. 首先我们看看他的主体流程

使用C++11封装线程池ThreadPool

读本文之前,请务必阅读: 使用C++11的function/bind组件封装Thread以及回调函数的使用 Linux组件封装(五)一个生产者消费者问题示例   线程池本质上是一个生产者消费者模型,所以请熟悉这篇文章:Linux组件封装(五)一个生产者消费者问题示例. 在ThreadPool中,物品为计算任务,消费者为pool内的线程,而生产者则是调用线程池的每个函数. 搞清了这一点,我们很容易就需要得出,ThreadPool需要一把互斥锁和两个同步变量,实现同步与互斥. 存储任务,当然需要一个

ZeroC ICE的远程调用框架 ThreadPool

ThreadPool提供Reactor/Proactor服务,并且强偶合了Reactor(反应器)/Proactor(前摄器).不同于Reactor/Proactor使用线程池 进行事件处理的设计.如ACE框架的ACE_TP_Reactor.同时ThreadPool提供一个共享的工作分派队列,可以用作Half-Async/Half-sync并发模式的线程池. ThreadPool为池中每个线程定制了一至的线程循环,运行在池中的线程者必须进行这个循环,接受线程池的统一控制.此外ThreadPool

简单看看ThreadPool的源码以及从中看出线程间传值的另一种方法

这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“. 一:ThreadPool的大概流程. 第一步:它会调用底层一个helper方法. 第二步:走进这个helper方法,我们会发现有一个队列,并且这个队列的item必须是QueueUserWorkItemCallback的实例,然后这就激发了我的 兴趣,看看QueueUserWorkItemCallback到底都有些什么? 第三步:走到

quantz入门和使用流程(转载)

1.下载地址:http://quartz-scheduler.org/downloads/catalog http://quartz-scheduler.org/downloads/destination?name=quartz-2.2.1-distribution.tar.gz&bucket=tcdistributions&file=quartz-2.2.1-distribution.tar.gz 2.quartz-2.1.5文件根目录中有很多jar包,Quartz 最核心的包就是qua

Java threadpool机制深入分析

简介 在前面的一篇文章里我对java threadpool的几种基本应用方法做了个总结.Java的线程池针对不同应用的场景,主要有固定长度类型.可变长度类型以及定时执行等几种.针对这几种类型的创建,java中有一个专门的Executors类提供了一系列的方法封装了具体的实现.这些功能和用途不一样的线程池主要依赖于ThreadPoolExecutor,ScheduledThreadPoolExecutor等几个类.如前面文章讨论所说,这些类和相关类的主要结构如下: 这里不是对所有类的详细实现做一个

[Java] ThreadPool用法与示例

1.ThreadPool的优点 在java.util.concurrent包下,提供了一系列与线程池相关的类.合理的使用线程池,可以带来多个好处: (1)降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗: (2)提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行: (3)提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控. 线程池可以应对突然大爆发量的访问,通过有限个固定线程为