See Also: IExecutor Members
An object that executes submitted Java.Lang.IRunnable 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 Executor is normally used instead of explicitly creating threads. For example, rather than invoking new Thread(new(RunnableTask())).start() for each of a set of tasks, you might use:
java Example
Executor executor = anExecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ...
java Example
class DirectExecutor implements Executor { public void execute(Runnable r) { r.run(); }}
java Example
class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start(); }}
java Example
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); } } }}
Memory consistency effects: Actions in a thread prior to submitting a Runnable object to an Executor its execution begins, perhaps in another thread.