线程池的参数解析及简单创建
来源:互联网 发布:淘宝上100多的丛发气瓶 编辑:程序博客网 时间:2024/06/05 09:11
a.corePoolSize: 核心线程数,能够同时执行的任务数量
b.maximumPoolSize:除去缓冲队列中等待的任务,最大能容纳的任务 数(其实是包括了核心线程池数量)
c.keepAliveTime:超出workQueue的等待任务的存活时间,就是指maximumPoolSize里面的等待任务的存活时间
d.unit:时间单位
e.workQueue:阻塞等待线程的队列,一般使用new LinkedBlockingQueue()这个,如果不指定容量,会一直往里边添加,没有限制,workQueue永远不会满,一般选择没有容量上限的队列;
f.threadFactory:创建线程的工厂,使用系统默认的类
g.handler:当任务数超过maximumPoolSize时,对任务的处理策略,默认策略是拒绝添加
执行流程:当线程数小于corePoolSize时,每添加一个任务,则立即开启线程执行
当corePoolSize满的时候,后面添加的任务将放入缓冲队列workQueue等待;
当workQueue也满的时候,看是否超过maximumPoolSize线程数,如果超过,默认拒绝执行,如果没有超过,则创建线程立即执行。
线程池的简单创建:
举例说明:
/**
* 对线程池进行管理和封装
* @author Administrator
*
*/
public class ThreadPoolManager {
private static ThreadPoolManager mInstance = new ThreadPoolManager();
private ThreadPoolExecutor executor;
private int corePoolSize;//核心线程池数量,表示能够同时执行的任务数量private int maximumPoolSize;//最大线程池数量,其实是包含了核心线程池数量在内的private long keepAliveTime = 1;//存活时间,表示最大线程池中等待任务的存活时间private TimeUnit unit = TimeUnit.HOURS;//存活时间的时间单位public static ThreadPoolManager getInstance(){ return mInstance;}private ThreadPoolManager(){ //核心线程池数量的计算规则:当前设备的可用处理器核心数*2 + 1,能够让CPU得到最大效率的发挥; corePoolSize = Runtime.getRuntime().availableProcessors()*2+1; maximumPoolSize = corePoolSize;//虽然用不到,但是不能是0,否则报错 //线程池机制:领工资的机制 executor = new ThreadPoolExecutor( corePoolSize, //3 maximumPoolSize,//5,当缓冲队列满的时候会放入最大线程池等待 keepAliveTime, unit, new LinkedBlockingQueue<Runnable>(),//缓冲队列,超出核心线程池的任务会被放入缓存队列中等待 Executors.defaultThreadFactory(),//创建线程的工厂类 new ThreadPoolExecutor.AbortPolicy()//当最大线程池也超出的时候,则拒绝执行 );}/** * 往线程池中添加任务 * @param r */public void execute(Runnable r){ if(r!=null){ executor.execute(r); }}/** * 从线程池中移除任务 * @param r */public void remove(Runnable r){ if(r!=null){ executor.remove(r); }}
}
- 线程池的参数解析及简单创建
- 线程的创建及简单使用
- 线程池参数解析
- MFC创建线程函数及参数的使用
- 线程的简单解析
- 线程的两种创建方式及简单的对比
- win32 简单窗口的创建及参数介绍
- 线程池的状态及KeepAliveTime参数
- 多线程学习--简单的线程池创建
- 创建线程及线程池
- 线程池的创建及基本使用
- 创建一个简单的线程池,来了解线程池
- 创建线程介绍及 GCD 简单使用
- 创建线程的简单代码
- 创建一个简单的线程
- 线程池的介绍及简单实现
- 线程池的介绍及简单实现
- 线程池的介绍及简单实现
- apt-get upate Hash Sum mismatch
- C++中extern "C"和export用法
- php memcache
- springboot 修改默认端口及application.properties常用配置
- eclipse查看jar包源代码乱码问题解决
- 线程池的参数解析及简单创建
- 单链表的基本操作
- 解析mediaTypes+viewResolvers+viewResolvers
- ICMP协议以及ping命令实现
- maven 打包到web app下运行 若是想改到server runtime 上运行 则必须先删除打好的war包
- Android Studio安装时出现的问题
- Java中在特定区间产生随机数
- 使用unordered_map和函数指针实现类私有函数的调用
- Oracle表空间(tablespaces)