Executor框架是在Java5中引入的,可以通过该框架来控制线程的启动,执行,关闭,简化 并发编程。Executor框架把任务提交和执行解耦,要执行任务的人只需要把任务描述清楚提 交即可,任务的执行提交人不需要去关心。
通过Executor框架来启动线程比使用Thread更好,更易管理,效率高,避免this逃逸问题。 Executor的实现还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能 监视等机制。
Executor
是一个接口,只定义了 一个方法void execute (Runnable command);该方法接受一个Runnable 实例,作用就是执行提交的任务,实现在子类中。

ExecutorService
也是一个接口,继承自Executor接口,提供了更多的方法,提供了生命周期的管理方法,以 及可跟踪一个或多个异步任务执行状况的方法。
ExecutorService的生命周期包括三种状态:运行,关闭,终止。创建后便进入运行状态,当 调用了 shutdown。方法时,进入关闭状态,此时不再接受新任务,但是它还在执行已经提交 了的任务,当所有的任务执行完后,便达到了终止状态。
Executor框架由3大部分组成:
1、 任务:被执行任务需要实现接口 Runnable、Callable。
2、 任务执行:任务执行机制的核心接口 Executor,继承Executor的ExecutorService。 CompletionService 等。
3、 异步计算的结果:Future和实现了 Future接口的FutureTask类。
为什么要使用Executor线程池框架
1、 每次执行任务创建线程new Thread()比较消耗性能,创建一个线程是比较耗时、耗资源 的。
2、 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程 之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗 很多系统资源。
3、 直接使用new Thread()启动的线程不利于扩展,比如定时执行、定期执行、定时定期执 行、线程中断等都不便实现。
使用Executor线程池框架的优点
1、 能复用已存在并空闲的线程从而减少线程对象的创建从而减少了消亡线程的开销。
2、 可有效控制最大并发线程数,提高系统资源使用率,同时避免过多资源竞争。
3、 框架中已经有定时、定期、单线程、并发数控制等功能。
综上所述使用线程池框架Executor能更好的管理线程、提供系统资源使用率。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.