技术开发 频道

Spring对JDK 5.0执行器的支持



    概述
    JDK 5.0新增了一个并发工具包java.util.concurrent,该工具包是由Doug Lea设计并作为JSR 166添加到JDK 5.0中。这是一个非常流行的并发工具包。他提供了功能强大的、高层次的线程构造器,包含了执行器、线程任务框架、线程安全队列、计时器、锁(包含了原子级别的锁)和其他一些同步的基本类型。

    执行器Executor是并发工具包中一个重要的类,它对Runnable实例的执行进行了抽象,实现者可以提供具体的实现:如简单的以一个线程来运行Runnable,或者通过一个线程池为Runnable提供共享线程。

    因为Executor是JDK 5.0新增的类,其实现者大多拥有线程池的内在支持,Spring 2.0 为Executor处理引入了一个新的抽象层,以便将线程池引入到JDK 1.3和1.4环境中,同时屏蔽掉JDK 1.3、1.4、5.0以及Java EE环境中线程池实现的差异。

    了解JDK 5.0的Executor java.util.concurrent.Executor接口的主要目的是要将“任务提交”和“任务执行”两者分离解耦。该接口定义了任务提交的方法,实现者可以提供不同的任务运行机制,解决具体的线程使用规则、调度方式等问题。
Executor只有一个方法:void execute(Runnable command) ,它接受任何实现了Runnable的实例,这个实例代表了一个需要执行的任务。调用者可以使用如下的代码提交任务:
    Executor executor = anExecutor;
    executor.execute(new RunnableTask1());①提交一个任务
    executor.execute(new RunnableTask2());②提交另一个任务
    Executor本身并没有要求实现者以何种方式运行这些任务,一个简单的实现者甚至可以在接受提交任务时,在主线程中运行它们。下面是一个Executor最简单的实现:
public class SimpleExecutor implements Executor { public void execute(Runnable r) { r.run();①在提交时直接运行任务 } }
    但是更多情况下,需要在另外的线程中运行任务,而非在主线程中运行任务,下面是一个稍微有意义一些的实现,它为每一个任务开启一个新的执行线程:
class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start();①在新的执行线程中执行任务 } }
0
相关文章