Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface ExecutorService extends Executor
Executor
это обеспечивает методы, чтобы управлять завершением и методами, которые могут произвести a Future
для того, чтобы отследить продвижение одной или более асинхронных задач. ExecutorService может быть выключен, который заставит его отклонять новые задачи. Два различных метода обеспечиваются для того, чтобы они завершили работу ExecutorService. shutdown()
метод позволит ранее представленным задачам выполниться перед завершением, в то время как shutdownNow()
метод препятствует тому, чтобы ожидающие задачи запустились, и пытается прекратить в настоящий момент выполнять задачи. После завершения у исполнителя нет никаких задач, активно выполняющихся, никакие задачи, ждущие выполнения, и никакие новые задачи не могут быть представлены. Неиспользованный ExecutorService должен быть выключен, чтобы позволить восстановление его ресурсов.
Метод submit расширяет основной метод Executor.execute(java.lang.Runnable)
создавая и возвращаясь a Future
это может использоваться, чтобы отменить выполнение и/или ожидать завершения. Методы invokeAny и invokeAll выполняют обычно полезные формы объемного выполнения, выполняя набор задач и затем ожидая по крайней мере одного, или всех, чтобы завершиться. (Класс ExecutorCompletionService
может использоваться, чтобы записать настроенные разновидности этих методов.)
Executors
класс обеспечивает методы фабрики для услуг исполнителя, предоставленных в этом пакете.
Executors.newFixedThreadPool(int)
метод фабрики: class NetworkService implements Runnable { private final ServerSocket serverSocket; private final ExecutorService pool; public NetworkService(int port, int poolSize) throws IOException { serverSocket = new ServerSocket(port); pool = Executors.newFixedThreadPool(poolSize); } public void run() { // run the service try { for (;;) { pool.execute(new Handler(serverSocket.accept())); } } catch (IOException ex) { pool.shutdown(); } } } class Handler implements Runnable { private final Socket socket; Handler(Socket socket) { this.socket = socket; } public void run() { // read and service request on socket } }Следующий метод завершает работу ExecutorService в двух фазах, сначала вызывая shutdown, чтобы отклонить входящие задачи, и затем вызывая shutdownNow, в случае необходимости, отменить любые вялые задачи:
void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); // Disable new tasks from being submitted try { // Wait a while for existing tasks to terminate if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Cancel currently executing tasks // Wait a while for tasks to respond to being cancelled if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { // (Re-)Cancel if current thread also interrupted pool.shutdownNow(); // Preserve interrupt status Thread.currentThread().interrupt(); } }
Эффекты непротиворечивости памяти: Действия в потоке до представления a Runnable
или Callable
задача к ExecutorService
произойдите - перед любыми мерами, предпринятыми той задачей, которые поочередно происходят - прежде, чем результат будет получен через Future.get()
.
Модификатор и Тип | Метод и Описание |
---|---|
boolean |
awaitTermination(long timeout, TimeUnit unit)
Блоки до всех задач завершили выполнение после запроса завершения работы, или тайм-аут происходит, или текущий поток прерывается, какой бы ни происходит сначала.
|
<T> List<Future<T>> |
invokeAll(Collection<? extends Callable<T>> tasks)
Выполняет данные задачи, возвращая список Фьючерса, содержащего их состояние, и заканчивается, когда все завершаются.
|
<T> List<Future<T>> |
invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет данные задачи, возвращая список Фьючерса, содержащего их состояние, и заканчивается, когда все завершаются, или тайм-аут истекает, какой бы ни происходит сначала.
|
<T> T |
invokeAny(Collection<? extends Callable<T>> tasks)
Выполняет данные задачи, возвращая результат того, который завершился успешно (то есть, не выдавая исключение), если кто-либо делает.
|
<T> T |
invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
Выполняет данные задачи, возвращая результат того, который завершился успешно (то есть, не выдавая исключение), если кто-либо делает прежде, чем данный тайм-аут протекает.
|
boolean |
isShutdown()
true возвратов, если этот исполнитель был выключен.
|
boolean |
isTerminated()
true возвратов, если все задачи завершились следующий выключенный.
|
void |
shutdown()
Инициирует аккуратное завершение работы, на котором выполняются ранее представленные задачи, но никакие новые задачи не будут приняты.
|
List<Runnable> |
shutdownNow()
Попытки остановить все активно выполняющиеся задачи, останавливает обработку ожидающих задач, и возвращает список задач, которые ждали выполнения.
|
<T> Future<T> |
submit(Callable<T> task)
Представляет возвращающую значение задачу для выполнения и возвращает Будущее, представляющее результаты на ожидании задачи.
|
Future<?> |
submit(Runnable task)
Представляет Выполнимую задачу для выполнения и возвращает Будущее, представляющее ту задачу.
|
<T> Future<T> |
submit(Runnable task, T result)
Представляет Выполнимую задачу для выполнения и возвращает Будущее, представляющее ту задачу.
|
выполниться
void shutdown()
Этот метод не ожидает ранее представленных задач завершить выполнение. Использовать awaitTermination
сделать это.
SecurityException
- если менеджер безопасности существует, и завершающий работу этого ExecutorService может управлять потоками, которые вызывающей стороне не разрешают изменить, потому что это не содержит RuntimePermission
("modifyThread"), или метод checkAccess менеджера безопасности лишает доступа.List<Runnable> shutdownNow()
Этот метод не ожидает активного выполнения задач завершиться. Использовать awaitTermination
сделать это.
Нет никаких гарантий вне попыток максимальных усилий прекратить обрабатывать активно выполняющиеся задачи. Например, типичные реализации отменят через Thread.interrupt()
, таким образом, любая задача, которая не в состоянии ответить на прерывания, никогда, возможно, не завершается.
SecurityException
- если менеджер безопасности существует, и завершающий работу этого ExecutorService может управлять потоками, которые вызывающей стороне не разрешают изменить, потому что это не содержит RuntimePermission
("modifyThread"), или метод checkAccess менеджера безопасности лишает доступа.boolean isShutdown()
boolean isTerminated()
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException
timeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаInterruptedException
- если прервано, ожидая<T> Future<T> submit(Callable<T> task)
Если требуется сразу блокировать ожидание задачи, можно использовать конструкции формы result = exec.submit(aCallable).get();
Отметьте: Executors
класс включает ряд методов, которые могут преобразовать некоторые другие общие подобные закрытию объекты, например, PrivilegedAction
к Callable
сформируйтесь, таким образом, они могут быть представлены.
task
- задача подчинитьсяRejectedExecutionException
- если задача не может быть запланирована для выполненияNullPointerException
- если задачей является нуль<T> Future<T> submit(Runnable task, T result)
task
- задача подчинитьсяresult
- результат возвратитьсяRejectedExecutionException
- если задача не может быть запланирована для выполненияNullPointerException
- если задачей является нульFuture<?> submit(Runnable task)
task
- задача подчинитьсяRejectedExecutionException
- если задача не может быть запланирована для выполненияNullPointerException
- если задачей является нуль<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
Future.isDone()
true для каждого элемента возвращенного списка. Отметьте, что завершенная задача, возможно, завершилась или обычно или выдавая исключение. Результаты этого метода неопределены, если данный набор изменяется, в то время как эта работа происходит.tasks
- набор задачInterruptedException
- если прервано, ожидая, когда отменяются незаконченные задачи.NullPointerException
- если задачами или каким-либо из его элементов является nullRejectedExecutionException
- если какая-либо задача не может быть запланирована для выполнения<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException
Future.isDone()
true для каждого элемента возвращенного списка. По возврату отменяются задачи, которые не завершились. Отметьте, что завершенная задача, возможно, завершилась или обычно или выдавая исключение. Результаты этого метода неопределены, если данный набор изменяется, в то время как эта работа происходит.tasks
- набор задачtimeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаInterruptedException
- если прервано, ожидая, когда отменяются незаконченные задачиNullPointerException
- если задачами, каким-либо из его элементов, или модулем является nullRejectedExecutionException
- если какая-либо задача не может быть запланирована для выполнения<T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException
tasks
- набор задачInterruptedException
- если прервано, ожидаяNullPointerException
- если задачами или какой-либо задачей элемента, подвергающейся выполнению, является nullIllegalArgumentException
- если задачи пустыExecutionException
- если никакая задача успешно не завершаетсяRejectedExecutionException
- если задачи не могут быть запланированы для выполнения<T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
tasks
- набор задачtimeout
- максимальное время, чтобы ожидатьunit
- единица измерения времени параметра тайм-аутаInterruptedException
- если прервано, ожидаяNullPointerException
- если задачами, или модулем, или какой-либо задачей элемента, подвергающейся выполнению, является nullTimeoutException
- если данный тайм-аут протекает прежде, чем любая задача успешно завершаетсяExecutionException
- если никакая задача успешно не завершаетсяRejectedExecutionException
- если задачи не могут быть запланированы для выполнения
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.