Есть ли сценарий для Executor вместо ExecutorService. Намерение за интерфейсом Executor? - PullRequest
7 голосов
/ 08 марта 2019

Мне интересно, есть ли какая-либо причина использовать Executor вместо ExecutorService.

Насколько я знаю, в JDK нет реализации интерфейса Executor, который также не является ExecutorService, что означает, что вы должны закрыть сервис, чтобы не было утечек памяти.Вы не можете отключить Executor, но вы можете сделать это с ExecutorService.

Итак, есть ли сценарий, в котором вы бы использовали что-то подобное:

private final Executor _executor = Executors.newCachedThreadPool();

Какое намерение стоит за интерфейсом Executor?Примеры приветствуются.

1 Ответ

7 голосов
/ 08 марта 2019

JavaDoc ваш друг в этом случае

Этот интерфейс обеспечивает способ отделения представления задачи от механизм выполнения каждой задачи, включая детали потока использование, планирование и т. д.

Далее вы читаете

Однако интерфейс Executor не требует строго исполнение будет асинхронным. В простейшем случае исполнитель может запустить отправленное задание сразу в ветке звонящего:

 class DirectExecutor implements Executor {
     public void execute(Runnable r) {
         r.run();
     }
 }

Эти определения уже выразительны для меня.

Относительно вашего примера использования. Имхо, нет, я бы никогда так не использовал этот интерфейс.
Однако может использоваться как принятый аргумент.

например. Я хочу запустить задачу, но я бы хотел, чтобы пользователь моего метода решил, как эта задача будет выполняться.

public void run(final Executor taskExecutor) {
   taskExecutor.execute(this.myTaskRunnable);
}

Реализация Executor может быть любой за сценой, она может быть синхронной (как в примере выше) или асинхронной, но мне все равно.
Это пользователь , который займет уход за ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...