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 而不是显式创建线程。
* 例如,new Thread(new RunnableTask()).start() 您可以使用以下命令而不是调用每组任务;
*
*
* <pre> {@code
* Executor executor = anExecutor();
* executor.execute(new RunnableTask1());
* executor.execute(new RunnableTask2());
* ...}</pre>
*
* 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 接口并不严格要求执行是异步的。
* 在最简单的情况下,执行程序可以立即在调用者的线程中运行提交的任务:
*
*
* <pre> {@code
* class DirectExecutor implements Executor {
* public void execute(Runnable r) {
* r.run();
* }
* }}</pre>
*
* More typically, tasks are executed in some thread other than the
* caller's thread. The executor below spawns a new thread for each
* task.
*
* 更典型地,任务在除调用者线程之外的某个线程中执行。
* 下面的执行程序为每个任务生成一个新线程。
*
*
* <pre> {@code
* class ThreadPerTaskExecutor implements Executor {
* public void execute(Runnable r) {
* new Thread(r).start();
* }
* }}</pre>
*
* 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实现对如何以及何时安排任务施加了某种限制。
* 下面的执行程序将任务提交序列化到第二个执行程序,说明了一个复合执行程序。
*
*
* <pre> {@code
* class SerialExecutor implements Executor {
* final Queue<Runnable> tasks = new ArrayDeque<>();
* final Executor executor;
* Runnable active;
*
* SerialExecutor(Executor executor) {
* this.executor = executor;
* }
*
* public synchronized void execute(Runnable r) {
* tasks.add(() -> {
* try {
* r.run();
* } finally {
* scheduleNext();
* }
* });
* if (active == null) {
* scheduleNext();
* }
* }
*
* protected synchronized void scheduleNext() {
* if ((active = tasks.poll()) != null) {
* executor.execute(active);
* }
* }
* }}</pre>
*
* The {@code Executor} implementations provided in this package
* implement {@link ExecutorService}, which is a more extensive
* interface. The {@link ThreadPoolExecutor} class provides an
* extensible thread pool implementation. The {@link Executors} class
* provides convenient factory methods for these Executors.
*
* 在 Executor 此包中提供实施方式实现 ExecutorService,这是一个更广泛的接口。
* ThreadPoolExecutor 类提供了一个可扩展的线程池实现。
* Executors 类为这些 Executor 提供了便捷的工厂方法。
*
*
* <p>Memory consistency effects: Actions in a thread prior to
* submitting a {@code Runnable} object to an {@code Executor}
* <a href="package-summary.html#MemoryVisibility"><i>happen-before</i></a>
* its execution begins, perhaps in another thread.
*
* 内存一致性效果:
* 在提交Runnable对象之前的一个线程中的操作 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);
}
JDK11源码学习01 | Executor接口
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 今天重要三件事:辅导、锻炼、学习 一、实践-肯定 1、小华生病还上学,肯定他是一个坚强的孩子; 2、晚上回来他已经...
- 最新更新的《如懿传》阿箬终于通过卖主求荣,背主弃义,如愿爬上了皇上的龙床,婉转承欢,曲意逢迎,以色侍上,撒娇卖乖无...