11(Executor框架)

1:Executor框架介绍
java的线程既是工作单元,也是执行机制。JDK1.5后,把工作单元与执行机制分离开来。工作单元包括:Runnable和Callable,而执行机制由Executor框架提供。
三大组成结构:
(1)任务:Runnable接口和Callable接口
(2)任务的执行:任务执行机制核心接口-Executor,继承自Executor的ExecutorService接口。
比较关键的2个实现类:ThreadPoolExecutor和ScheduledThreadPoolExecutor
(3)异步计算结果:包括接口-Future,实现类-FutureTask类。
(4)Executor框架的类和接口示意图:
11(Executor框架)
文章图片
(5)Executor框架的使用示意图
11(Executor框架)
文章图片
2:Executor框架的成员
(1)ThreadPoolExecutor
通过Executors工厂来创建三种:
FixedThreadPool :可重用固定线程数的线程池。注意它使用无界队列LinkedBlockingQueue作为线程池的工作队列。
SingleThreadExecutor:是使用了单个worker线程的Executor。注意它也是使用无界队列作为线程池的工作队列。
CachedThreadPool:是一个会根据需要创建新线程的线程池。
(2)ScheduleThreadPoolExecutor
通过Executors工厂来创建二种:
ScheduledThreadPoolExecutor:包含若干个线程的ScheduleThreadPoolExecutor
SingleThreadScheduledExecutor:只包含一个线程的ScheduleThreadPoolExecutor
(3)Future接口
注意:Future接口和实现了Future接口的FutureTask类,用来表示异步计算的结果。
(4)Runnable接口和Callable接口
区别:大家都可以被ThreadPoolExecutor或ScheduledThreadPoolExecutor执行。但是Runnable不会返回结果,而Callable可以返回结果。
3:ThreadPoolExecutor详解,继续补充2中的内容即可。
4:ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。只要用来在给定延迟之后运行任务,或者定期执行任务。—再思考思考????
(1)说一下ScheduledThreadPoolExecutor和Timer的区别?
TImer对应的是单个后台线程。ScheduledThreadPoolExecutor可以在构造函数中指定多个对应的后台线程数。
(2)运行机制:
11(Executor框架)
文章图片
(3)ScheduledThreadPoolExecutor的任务执行步骤
11(Executor框架)
文章图片
4:FutureTask详解
Future接口和实现Future接口的FutureTask类,代表异步计算的结果。
(1)FutureTask的get和cancel的执行示意图:
11(Executor框架)
文章图片
(2)FutureTask的使用
当一个线程需要等待另一个线程把某个任务执行完后它才能继续执行,可以使用FutureTask。
还有:join,CountDownLatch
(3)FutureTask的实现
原理:基于AbstractQueuedSynchronizer(简称:AQS)。
什么是AQS?
答:AQS是一个同步框架,它提供通用机制来原子性管理同步状态、阻塞和唤醒线程,以及维护被阻塞线程的队列。
jdk中的实现类:ReentrantLock,Semaphore,ReentrantReadWriteLock,CountDownLatch和FutureTask
【11(Executor框架)】(4)FutureTask的设计示意图
11(Executor框架)
文章图片

    推荐阅读