Executor框架

1、线程不是越多越好,因为Java线程的创建和销毁都需要一定的开销,线程越多,会消耗大量的计算资源(包括时间和内存等),最终会导致系统处于高负荷状态而崩溃。

 

2、线程的工作单元包括Runnable和Callable,执行机制则由Executor框架提供。

 

3、Executor框架由3部分组成:
(1)任务:包括需要实现的Runnable接口或者Callable接口。

(2)任务的执行:包括核心接口Executor,以及继承自Executor的ExecutorService接口。其中有两个实现了ExecutorService接口的关键类(ThreadPoolExecutorScheduledThreadPoolExecutor)。

(3)异步计算的结果:包括Future接口和实现Future接口的FutureTask类。

 

4、执行线程任务时使用ExecutorService.execute(Runnable command)或ExecutorService.submit(Runnable task)或ExecutorService.submit(Callable<T> task)方法,submit方法会返回一个FutureTask对象。

 

5、通常使用工厂类Executors来创建ThreadPoolExecutor和ScheduledThreadPoolExecutor。

 

6、ThreadPoolExecutor主要有以下3种:

(1)FixedThreadPool:固定线程数,适用于需要限制当前线程数量,负载比较重的应用场景。

(2)SingleThreadExecutor:创建单个线程,适用于需要保证顺序地执行各个任务,并且在任意时间点,不会有多个线程活动的应用场景。

(3)CachedThreadPool:大小无界的线程池,适用于执行很多的短期异步任务的小程序,或者是负载较轻的服务器。

 

7、ScheduledThreadPoolExecutor主要有以下2种:

(1)ScheduledThreadPoolExecutor:包含若干线程。

(2)SingleThreadScheduledExecutor:只包含一个线程。

 

8、Runnbale不会返回结果,Callable可以返回结果,可以使用Executors把一个Runnable包装成一个Callable

public static Callable<Object> callable(Runnable task);

 

posted on 2019-05-19 17:06  逍遥1989  阅读(112)  评论(0)    收藏  举报