天天看点

线程池-ThreadPoolExecutor

以下为构造线程池实例的构造方法:

线程池-ThreadPoolExecutor
corePoolSize:核心线程数量
maximumPoolSize:线程最大线程数
workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响
keepAliveTime:线程没有任务执行时最多保持多久时间终止
threadFactory:线程工厂,用来创建线程
rejectHandler:当拒绝处理任务时的策略
           

unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:

TimeUnit.DAYS;               //天
TimeUnit.HOURS;              //小时
TimeUnit.MINUTES;            //分钟
TimeUnit.SECONDS;            //秒
TimeUnit.MILLISECONDS;       //毫秒
TimeUnit.MICROSECONDS;       //微妙
TimeUnit.NANOSECONDS;        //纳秒
           

 线程池中的几个常用方法:

execute():提交任务,交给线程池执行

submit():提交任务,能够返回执行结果 execute+Future

shutdown():关闭线程池,等待任务都执行完

shutdownNow():关闭线程池,不等待任务执行完

getTaskCount():线程池已执行和未执行的任务总数

getCompletedTaskCount():已完成的任务数量

getPoolSize():线程池当前的线程数量

getActiveCount():当前线程池正在执行任务的线程数量

扩展:可根据以上四个get方法做一个图形化的界面,实现线程监控,每隔一分钟刷新一次

线程池-Executor框架接口:

// 创建一个可缓存线程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
           
// 创建一个可重用固定个数的线程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
           
//创建一个定长线程池,支持定时及周期性任务执行
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
           
//创建一个单线程化的线程池
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
           

线程池:合理配置

CPU密集型任务,就需要尽量压榨CPU,参考值可以设为CPU的数量+1

IO密集型任务,参考值可以设置为CPU数量的2倍

继续阅读