/** * Constructs a runnable future with a runnable work unit. * * @param recurring boolean to indicate if this task can run multiple times, and thus must be reset after each run * @param task runnable to be run * @param result result to be provide after run has completed * @param executingExecutor Executor task will be run on for possible listener optimization, or {@code null} */ public ListenableFutureTask(boolean recurring, Runnable task, T result, Executor executingExecutor) { this(recurring, RunnableCallableAdapter.adapt(task, result), executingExecutor); }
/** * Constructs a runnable future with a runnable work unit. * * @param recurring boolean to indicate if this task can run multiple times, and thus must be reset after each run * @param task runnable to be run * @param result result to be provide after run has completed * @param executingExecutor Executor task will be run on for possible listener optimization, or {@code null} */ public ListenableFutureTask(boolean recurring, Runnable task, T result, Executor executingExecutor) { this(recurring, RunnableCallableAdapter.adapt(task, result), executingExecutor); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
/** * Submit a task to be run with a given thread key. * * @param <T> type of result returned from the future * @param threadKey object key where {@code equals()} will be used to determine execution thread * @param task Runnable to be executed * @param result Result to be returned from future when task completes * @return Future to represent when the execution has occurred and provide the given result */ public <T> ListenableFuture<T> submit(Object threadKey, Runnable task, T result) { return submit(threadKey, RunnableCallableAdapter.adapt(task, result)); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
/** * Submit a task to be run with a given thread key. * * @param <T> type of result returned from the future * @param threadKey object key where {@code equals()} will be used to determine execution thread * @param task Runnable to be executed * @param result Result to be returned from future when task completes * @return Future to represent when the execution has occurred and provide the given result */ public <T> ListenableFuture<T> submit(Object threadKey, Runnable task, T result) { return submit(threadKey, RunnableCallableAdapter.adapt(task, result)); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs, TaskPriority priority) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs, priority); }
@Override public <T> ListenableFuture<T> submit(Runnable task, T result) { return submit(RunnableCallableAdapter.adapt(task, result)); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs); }
@Override public <T> ListenableFuture<T> submit(Runnable task, T result) { return submit(RunnableCallableAdapter.adapt(task, result)); }
@Override public <T> ListenableFuture<T> submit(Runnable task, T result, TaskPriority priority) { return submit(RunnableCallableAdapter.adapt(task, result), priority); }
@Override public <T> ListenableFuture<T> submitScheduled(Runnable task, T result, long delayInMs) { return submitScheduled(RunnableCallableAdapter.adapt(task, result), delayInMs); }
@Test public void adaptDoNothingTest() { assertTrue(RunnableCallableAdapter.adapt(DoNothingRunnable.instance(), null) == RunnableCallableAdapter.adapt(DoNothingRunnable.instance(), null)); assertFalse(RunnableCallableAdapter.<Object>adapt(DoNothingRunnable.instance(), this) == RunnableCallableAdapter.adapt(DoNothingRunnable.instance(), null)); } }
@Test (expected = IllegalArgumentException.class) public void adaptFail() { RunnableCallableAdapter.adapt(null, null); fail("Exception should have thrown"); }
@Test public void adaptTest() { TestRunnable tr = new TestRunnable(); Object result = new Object(); RunnableCallableAdapter<?> rca = (RunnableCallableAdapter<?>)RunnableCallableAdapter.adapt(tr, result); assertTrue(tr == rca.runnable); assertTrue(result == rca.result); }
@Test public void getContainedRunnableTest() { TestRunnable tr = new TestRunnable(); RunnableCallableAdapter<?> rca = (RunnableCallableAdapter<?>)RunnableCallableAdapter.adapt(tr, null); assertTrue(tr == rca.getContainedRunnable()); }
@Test public void callTest() { TestRunnable tr = new TestRunnable(); Object result = new Object(); RunnableCallableAdapter<?> rca = (RunnableCallableAdapter<?>)RunnableCallableAdapter.adapt(tr, result); assertTrue(result == rca.call()); assertTrue(tr.ranOnce()); }