Initially used by the {@link com.volantis.testtools.license.LicenseManager}to allow test cases to provide code to be executed on their behalf, but may be re-used by other classes of a similar ilk.
@deprecated This is one of those ideas that looked good but turned out bad.It ends up being quite confusing if unrelated test classes utilise the same interface for different things. For example, usage searchs return unrelated things. Therefore, I am deprecating this and intend that we ought to have separate executors for each manager class that needs them.
Executor executor = anExecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ...However, the 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:
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.
class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) { new Thread(r).start(); } }Many 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.
class SerialExecutor implements Executor { final Queue<Runnable> tasks = new ArrayDeque<Runnable>(); 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 Executor implementations provided in this package implement {@link ExecutorService}, which is a more extensive interface. The {@link ThreadPoolExecutor} class provides anextensible thread pool implementation. The {@link Executors} classprovides convenient factory methods for these Executors. @since 1.5 @author Doug Lea
Executor executor = anExecutor; executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); ...However, the {@code Executor} interface does not strictlyrequire that execution be asynchronous. In the simplest case, an executor can run the submitted task immediately in the caller's thread:
{@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 oflimitation on how and when tasks are scheduled. The executor below serializes the submission of tasks to a second executor, illustrating a composite executor.
{@code}class SerialExecutor implements Executor final QueueThe {@code Executor} implementations provided in this packageimplement {@link ExecutorService}, which is a more extensive interface. The {@link ThreadPoolExecutor} class provides anextensible thread pool implementation. The {@link Executors} classprovides convenient factory methods for these Executors.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 {@code Runnable} object to an {@code Executor}happen-before its execution begins, perhaps in another thread. @since 1.5 @author Doug Lea
Executor exec = new DefaultExecutor(); CommandLine cl = new CommandLine("ls -l"); int exitvalue = exec.execute(cl);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|