Current 之Excutor
package java.util.concurrent;
/**
*
*这是一个执行runnable的任务,这个接口从技术层面为每个任务如何运行提供一种解耦的方式,
*包括线程使用的细节,时序安排等。Excutor是经常被使用的,除了明确的创建线程。
*例如,如果你使用一系列的线程不是new Thread(new(RunnableTask())).start(),你就可以使用:
* <pre>
* Executor executor = <em>anExecutor</em>;
* executor.execute(new RunnableTask1());
* executor.execute(new RunnableTask2());
* ...
* </pre>
*然而,Excutor接口不需要严格的异步执行,在最简单的例子里面,一个Excutor可以在调用者的线程里面立即运行提交的任务
*更典型的,任务可执行在一些线程里面。而不是调用者的线程里面。excutor会创建一个新的线程
*许多实现了Excutor接口的都被降价了一些限制关于怎样、何时任务被安排执行。
*这个Excutor之下的一系列的任务都是二级Excutor用来解释一个复杂的Excutor
*实现都在ExcutorService包里面,这是一个更具有扩展性的接口,ThreadPoolExcutor类提供了一个扩展的线程池的实现。
*Excutor类提供了一个方便的工厂放阿飞为这些Excutors
*内存一致性的影响:在一个优先提交一个Runnable对象给一个Excutor的行为中,在这之前taken在另一个线程中。
*/
public interface 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);
}