1.线程池的优点:
重用存在的线程,减少对象的创建,消亡的开销,性能佳
可有效控制最大的并发线程数,提高系统资源的利用率,同时可以避免过多的资源竞争,避免阻塞
提供定时执行,定期执行,单线程并发控制等功能
2,corePoolSize:核心线程数量
maximumPoolSize:线程池最大 的线程数
workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池的运行产生重大的影响
keepAliveTime:线程池没有任务执行的时候最多保持的多久时间可以停止
unit:keepAliveTime 的时间单位
threadFactory:线程工厂,用来创建线程
rejectHandler:当拒绝任务的时候的策略
策略一般一共有四种:
1)抛出异常
2)用调用者所在的线程执行任务
3)丢弃队列中最靠前的任务来执行该任务
4)丢弃该任务
3.线程的状态一共有
running------> (通过调用用shutdown()方法) shutDown / (通过调用shutDownNow()方法 stop) ------->(当阻塞队列为空的时候,线程池中的线程工作数量为零)tidying ------>(调用terminate()方法 )terminated
4.线程池中的方法都有哪些
execute() 提交任务,交给线程池执行
submit() 提交任务,能够返回执行结果
shutdown() 关闭线程池,等待任务都执行完毕
shutdown() 关闭线程池,不等待任务执行完毕
5.线程池-----监控方法 (ThreadPoolExecutor)
getTaskCount() 线程池已执行和未执行的任务总数
getCompletedTaskCount() 已完成的任务数量
getPoolSize()线程池当前的线程数量
getActiveCount():当前线程池中正在执行的任务的线程的数量
6.Executor框架接口 (这个里面实现的都是ThreadPoolExecutor)
1).可以提供缓存的线程池
Executors.newCachedThreadPool();
2).提供定长的线程池,控制线程最大的并发数
Executors.newFixedThreadPool();
3).提供定长的线程池,支持定时以及周期性的任务执行
Executors.newScheduledThreadPool();
联想到定时器Timer:定时执行任务
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run(){
System.out.println("time run");
}
}
4).提供单一的线程,保证所有的任务按照指定的顺序(FIFO,LRU方式)
Executors.newSingleThreadExecutor();