java.util.concurrent
package defines three executor
interfaces:
Executor
, a simple interface that supports
launching new tasks.
ExecutorService
, a subinterface of
Executor
, which adds features that help manage the
lifecycle, both of the individual tasks and of the executor
itself.
ScheduledExecutorService
, a subinterface of
ExecutorService
, supports future and/or periodic
execution of tasks.
Executor
InterfaceExecutor
interface provides a single method, execute
, designed to
be a drop-in replacement for a common thread-creation idiom. If
r
is a Runnable
object, and e
is an Executor
object you can replace
(new Thread(r)).start();
e.execute(r);
execute
is less specific. The
low-level idiom creates a new thread and launches it immediately.
Depending on the Executor
implementation,
execute
may do the same thing, but is more likely to use
an existing worker thread to run r
, or to place
r
in a queue to wait for a worker thread to become
available. (We'll describe worker threads in the section on Thread Pools.)
The executor implementations in java.util.concurrent
are
designed to make full use of the more advanced
ExecutorService
and ScheduledExecutorService
interfaces, although they also work with the base
Executor
interface.
ExecutorService
InterfaceExecutorService
interface supplements execute
with a similar, but more
versatile submit
method. Like execute
,
submit
accepts Runnable
objects, but also
accepts
Callable
objects, which allow the task to return a value. The
submit
method returns a
Future
object, which is used to retrieve the Callable
return
value and to manage the status of both Callable
and
Runnable
tasks.
ExecutorService
also provides methods for submitting
large collections of Callable
objects. Finally,
ExecutorService
provides a number of methods for managing
the shutdown of the executor. To support immediate shutdown, tasks
should handle interrupts correctly.
ScheduledExecutorService
InterfaceScheduledExecutorService
interface supplements the methods of its parent
ExecutorService
with schedule
, which
executes a Runnable
or Callable
task after a
specified delay. In addition, the interface defines
scheduleAtFixedRate
and
scheduleWithFixedDelay
, which executes specified tasks
repeatedly, at defined intervals.