The Art of Java Concurrency Programming V
文章目录
第十章、Executor
10.1 Executor框架与成员
1、ThreadPoolExecutor
- FixedThreadPool:适用于满足资源管理的需求,而需要限制当前线程数量的应用场景,适合负载较重的服务器
- SingleThreadExecutor:任何时间不会有多个线程活动,顺序执行每个任务
- CachedThreadPool:Queue是SynchronousQueue(传递,每个插入必须等待一个移除),线程池最大为INT_MAX,大小无界,如果其没有空闲线程取Queue中的那个任务,新的线程会被创建,如果提交速度快于执行速度,资源迅速耗尽,适用于很多短期异步任务小程序或负载较轻的服务器
2、ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor:需要多个后台线程执行周期任务,同时需要限制后台线程的数量
- SingleThreadScheduledExecutor:单个后台线程执行周期任务,保证顺序的执行各个任务
- Queue使用DelayQueue实现,线程的take任务方法中如果取不到则进入Condition等待,如果取到没有到期的任务则进行Condition等待相应时间,如果取到则唤醒所有等待的线程并且返回取到的任务
- Queue的add方法中,如果添加的是Queue中的头元素,则唤醒所有等待的线程(一种原队列为空,一种所添加的元素为最先需要执行的任务,所以要唤醒所有线程取自己去执行)
3、Future接口
- 表示异步计算的结果
4、Runnable与Callable
- Callable可由Runnable包装:java.util.concurrent.Executors#callable(java.lang.Runnable, T)