Netty:NioEventLoopGroup 之Executor 翻译注解

NioEventLoopGroup 的Executor

NioEventLoopGroup.png

JAVA-DOC 翻译


/*
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * Written by Doug Lea with assistance from members of JCP JSR-166
 * Expert Group and released to the public domain, as explained at
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

package java.util.concurrent;

/**
 * An object that executes submitted {@link Runnable} tasks. This
 * interface provides a way of decoupling task submission from the
 * mechanics of how each task will be run, including details of thread
 * use, scheduling, etc.  An {@code Executor} is normally used
 * instead of explicitly creating threads. For example, rather than
 * invoking {@code new Thread(new(RunnableTask())).start()} for each
 * of a set of tasks, you might use:

这是一个可以执行被提交任务(任务要实现Runnable接口)的对象,Executor 接口提供一种解耦的任务提交方式,
这种方式源于每个任务如何被执行的机制,包括线程的使用细节,调度等等。这个接口通常被用于明确创建线程的替代形式。举个例子,
相对于原来的 {@code new Thread(new(RunnableTask())).start()} 直接调用方式,你可能用以下方式:

* 
* Executor executor = anExecutor;
* executor.execute(new RunnableTask1());
* executor.execute(new RunnableTask2());
* ...
* 
* * However, the {@code Executor} interface does not strictly * require that execution be asynchronous. In the simplest case, an * executor can run the submitted task immediately in the caller's * thread:

然而,
 Executor接口要求并不严格要求任务被异步的执行,在最简单的场景下,
 一个Executor能在当前调用的线程中立刻被执行。

*  
 {@code
* class DirectExecutor implements Executor {
*   public void execute(Runnable r) {
*     r.run();
*   }
* }}
* * More typically, tasks are executed in some thread other * than the caller's thread. The executor below spawns a new thread * for each task.

更多典型的场景下,任务被一些线程执行,而并不在当前线程下,下面的例子中,为每一个任务就产生了一个新的线程。

*  
 {@code
* class ThreadPerTaskExecutor implements Executor {
*   public void execute(Runnable r) {
*     new Thread(r).start();
*   }
* }}
* * Many {@code Executor} implementations impose some sort of * limitation on how and when tasks are scheduled. The executor below * serializes the submission of tasks to a second executor, * illustrating a composite executor.

一些Executor的实现强加某种关于任务何时和如何被调度的限制,下边的串行化的任务交给第二个executor去执行。一个组合的executor的示例如下:

*  
 {@code
* class SerialExecutor implements Executor {
*   final Queue tasks = new ArrayDeque();
*   final Executor executor;
*   Runnable active;
*
*   SerialExecutor(Executor executor) {
*     this.executor = executor;
*   }
*
*   public synchronized void execute(final Runnable r) {
*     tasks.offer(new Runnable() {
*       public void run() {
*         try {
*           r.run();
*         } finally {
*           scheduleNext();
*         }
*       }
*     });
*     if (active == null) {
*       scheduleNext();
*     }
*   }
*
*   protected synchronized void scheduleNext() {
*     if ((active = tasks.poll()) != null) {
*       executor.execute(active);
*     }
*   }
* }}
* * The {@code Executor} implementations provided in this package * implement {@link ExecutorService}, which is a more extensive * interface. The {@link ThreadPoolExecutor} class provides an * 个thread pool implementation. The {@link Executors} class * provides convenient factory methods for these Executors.

在当前包下提供了一些实现ExecutorService接口的实现,这个接口是一个相对比较广泛的接口,
ThreadPoolExecutor 该类提供了一个可扩展的线程池实现。Execturos静态类提供一些方便的工厂方法去创建不同的Executor

 * 

Memory consistency effects: Actions in a thread prior to * submitting a {@code Runnable} object to an {@code Executor} * happen-before * its execution begins, perhaps in another thread.

内存一致性影响:在当前线程的动作要优先于提交给Executor的任务对象,
它们在真正开始执行行的时侯,可能在另一个线程里了。

 * @since 1.5
 * @author Doug Lea
 */
public interface Executor {

    /**
     * Executes the given command at some time in the future.  The command
     * may execute in a new thread, in a pooled thread, or in the calling
     * thread, at the discretion of the {@code Executor} implementation.

执行给定的命令任务在未来的某个时间点,这个命令可能在一个新的线程里,或者在一个线程池里,也有可能就在前调用线程中。
这些源于Executor的灵活实现。

     * @param command the runnable task
     * @throws RejectedExecutionException if this task cannot be
     * accepted for execution
     * @throws NullPointerException if command is null
     */
    void execute(Runnable command);
}

你可能感兴趣的:(Netty:NioEventLoopGroup 之Executor 翻译注解)