Два недолговечных потока против Executor

У меня есть только две краткосрочные задачи для запуска в фоновом режиме при запуске приложения. Имеет ли смысл использовать поток для каждой задачи или Executor, например, один исполнитель потока для отправки этих двух задач.

Имеет ли смысл создавать два потока, которые быстро умирают, в отличие от однопоточного исполнителя, ожидающего задач на протяжении всего жизненного цикла приложения, когда их нет?


person user592748    schedule 10.02.2016    source источник


Ответы (2)


Одним из больших преимуществ использования пула потоков является то, что вы избегаете сценария, когда у вас есть некоторая задача, которую вы выполняете многократно, а затем, если что-то пойдет не так с этой задачей, что приведет к зависанию потока, вы рискуете потерять поток каждый раз, когда происходит выполнение задачи, что приводит к запуску приложения из потоков. Если ваши потоки запускаются только один раз при запуске, вероятно, этот риск не будет применяться к вашему случаю.

Вы все еще можете использовать Executor, но закройте его, как только ваши задачи будут запущены. Может быть предпочтительнее использовать Futures или CompletionService, а не необработанные потоки.

person Nathan Hughes    schedule 10.02.2016
comment
выполнение 2-фазного завершения, как указано здесь. docs.oracle.com/javase/7/ документы/api/java/util/concurrent/ - person user592748; 11.02.2016

Если вы делаете это более одного раза в своем приложении, ThreadPoolExecutor определенно стоит посмотреть.

Одним из преимуществ является объединение потоков. Это освобождает среду выполнения для создания и уничтожения объектов ОС каждый раз, когда вам нужен поток. Кроме того, вы получаете контроль над количеством созданных потоков - но это не кажется вам большой проблемой - и потоками, запущенными/выполненными.

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

Поскольку Натан добавил фьючерсы, есть также Timer и TimerTask. Также очень удобно для фонового действия типа "Выстрелил и забыл" :-).

person thst    schedule 10.02.2016