线程执行器

自从java 5开始,java并发API提供了一套机制,这套机制称之为执行器框架(Executor Framework),围绕着Executor接口和它的子接口ExecutorService,以及实现这两个接口ThreadPoolExecutor类展开。
这套机制分离了任务的建立和执行。经过使用执行器,仅须要实现Runnable接口的对象,而后将这些对象发送给执行器便可。
执行器经过建立所需的线程,来负责这些Runnable对象的建立、实例化以及运行。
可是执行器功能不限于此,它使用了线程池来提升应用程序的性能。当发送一个任务给执行器时,执行器会尝试使用线程池中的线程来执行这个任务,避免了不断地建立和销毁线程而致使系统性能降低。
执行器框架另一个重要的优点是Callable接口。它相似于Runnable接口,可是却提供了两方面的加强:
1).这个接口的主方法名称为call(),能够返回结果。
2).当发送一个Callable对象给执行器时,将得到一个实现Future接口的对象,可使用这个对象来控制Callable对象的状态和结果。

建立线程执行器的基本步骤:
1).经过Executors类来建立线程执行器的线程池,例如;
ThreadPoolExecutor executor = Executors.newCachedThreadPool();
注:Executors类能够建立多种类型的线程池,如:
Executors.newCachedThreadPool():是一个会根据须要建立新线程的线程池。
Executors.newSingleThreadExecutor():是使用单个worker线程的Executor。
Executors.newFixedThreadPool():被称为可重用固定线程数的线程池
2).经过线程池对象执行任务
executor.execute(task);//该方法执行后没有返回值
或者
executor.submit(task);//该方法执行后返回Future接口对象,该接口中声明了一些方法来获取任务对象产生的结果,并管理它们的状态
注:一旦建立了执行器,就可使用执行器的execute()方法或者submit()方法来发送Runnable或者Callable类型的任务
3).关闭线程执行器
executor.shutdown();
注:执行器以及ThreadPoolExecutor类一个重要的特性是,一般须要显示的去结束它。
若是不这样作,那么执行器将继续执行,程序也不会结束。若是执行器没有任务可执行了,它将继续等待新任务的到来,而不会结束执行。
java应用程序不会结束直到全部非守护线程结束它们的运行,所以,若是没有终止执行器,应用程序将永远不会结束。

ThreadPoolExecutor类:做为java.util.concurrent包对外提供基础实现,之内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务。
ScheduledThreadPoolExecutor类:是线程池执行器的一种,继承ThreadPoolExecutor,在ThreadPoolExecutor的基础上添加了按计划执行线程的功能,如延迟执行、定时执行、周期性执行。java

相关文章
相关标签/搜索