/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.core.task;

import java.util.concurrent.Callable;
import java.util.concurrent.Future;

Extended interface for asynchronous TaskExecutor implementations, offering an overloaded execute(Runnable, long) variant with a start timeout parameter as well support for Callable.

Note: The Executors class includes a set of methods that can convert some other common closure-like objects, for example, PrivilegedAction to Callable before executing them.

Implementing this interface also indicates that the TaskExecutor.execute(Runnable) method will not execute its Runnable in the caller's thread but rather asynchronously in some other thread.

Author:Juergen Hoeller
See Also:
Since:2.0.3
/** * Extended interface for asynchronous {@link TaskExecutor} implementations, * offering an overloaded {@link #execute(Runnable, long)} variant with a start * timeout parameter as well support for {@link java.util.concurrent.Callable}. * * <p>Note: The {@link java.util.concurrent.Executors} class includes a set of * methods that can convert some other common closure-like objects, for example, * {@link java.security.PrivilegedAction} to {@link Callable} before executing them. * * <p>Implementing this interface also indicates that the {@link #execute(Runnable)} * method will not execute its Runnable in the caller's thread but rather * asynchronously in some other thread. * * @author Juergen Hoeller * @since 2.0.3 * @see SimpleAsyncTaskExecutor * @see org.springframework.scheduling.SchedulingTaskExecutor * @see java.util.concurrent.Callable * @see java.util.concurrent.Executors */
public interface AsyncTaskExecutor extends TaskExecutor {
Constant that indicates immediate execution.
/** Constant that indicates immediate execution. */
long TIMEOUT_IMMEDIATE = 0;
Constant that indicates no time limit.
/** Constant that indicates no time limit. */
long TIMEOUT_INDEFINITE = Long.MAX_VALUE;
Execute the given task.
Params:
  • task – the Runnable to execute (never null)
  • startTimeout – the time duration (milliseconds) within which the task is supposed to start. This is intended as a hint to the executor, allowing for preferred handling of immediate tasks. Typical values are TIMEOUT_IMMEDIATE or TIMEOUT_INDEFINITE (the default as used by TaskExecutor.execute(Runnable)).
Throws:
/** * Execute the given {@code task}. * @param task the {@code Runnable} to execute (never {@code null}) * @param startTimeout the time duration (milliseconds) within which the task is * supposed to start. This is intended as a hint to the executor, allowing for * preferred handling of immediate tasks. Typical values are {@link #TIMEOUT_IMMEDIATE} * or {@link #TIMEOUT_INDEFINITE} (the default as used by {@link #execute(Runnable)}). * @throws TaskTimeoutException in case of the task being rejected because * of the timeout (i.e. it cannot be started in time) * @throws TaskRejectedException if the given task was not accepted */
void execute(Runnable task, long startTimeout);
Submit a Runnable task for execution, receiving a Future representing that task. The Future will return a null result upon completion.
Params:
  • task – the Runnable to execute (never null)
Throws:
Returns:a Future representing pending completion of the task
Since:3.0
/** * Submit a Runnable task for execution, receiving a Future representing that task. * The Future will return a {@code null} result upon completion. * @param task the {@code Runnable} to execute (never {@code null}) * @return a Future representing pending completion of the task * @throws TaskRejectedException if the given task was not accepted * @since 3.0 */
Future<?> submit(Runnable task);
Submit a Callable task for execution, receiving a Future representing that task. The Future will return the Callable's result upon completion.
Params:
  • task – the Callable to execute (never null)
Throws:
Returns:a Future representing pending completion of the task
Since:3.0
/** * Submit a Callable task for execution, receiving a Future representing that task. * The Future will return the Callable's result upon completion. * @param task the {@code Callable} to execute (never {@code null}) * @return a Future representing pending completion of the task * @throws TaskRejectedException if the given task was not accepted * @since 3.0 */
<T> Future<T> submit(Callable<T> task); }