Executor框架
1、线程不是越多越好,因为Java线程的创建和销毁都需要一定的开销,线程越多,会消耗大量的计算资源(包括时间和内存等),最终会导致系统处于高负荷状态而崩溃。
2、线程的工作单元包括Runnable和Callable,执行机制则由Executor框架提供。
3、Executor框架由3部分组成:
(1)任务:包括需要实现的Runnable接口或者Callable接口。
(2)任务的执行:包括核心接口Executor,以及继承自Executor的ExecutorService接口。其中有两个实现了ExecutorService接口的关键类(ThreadPoolExecutor和ScheduledThreadPoolExecutor)。
(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);
浙公网安备 33010602011771号