Я читал об этом довольно много за последние пару часов, и я просто не вижу никакой причины (действительной причины) для вызова shutdown()
на ExecutorService
, если у нас нет огромного приложения, которое хранит, десятки и десятки различных служб executor, которые не используются в течение длительного времени.
Единственное (из того, что я понял), что происходит при завершении работы, - это делать то, что делает нормальный поток, как только он это сделает. Когда обычный поток завершит выполнение метода Runnable (или Callable), он будет передан в сборщик мусора для сбора. С помощью Executor Service потоки будут просто приостановлены, они не будут отмечены для сборки мусора. Для этого необходимо отключение.
Хорошо, вернемся к моему вопросу. Есть ли какая-либо причина вызывать завершение работы на ExecutorService
очень часто или даже сразу после предоставления ему каких-либо задач? Я хотел бы оставить позади случай, когда кто-то делает это, и сразу после этого вызывает awaitTermination()
поскольку это проверено. Как только мы это сделаем, мы должны заново создать новый ExecutorService
, чтобы сделать то же самое. Разве не вся идея для ExecutorService
повторно использовать потоки? Так зачем так быстро уничтожать ExecutorService
?
Разве это не рациональный способ просто создать ExecutorService
(или пару в зависимости от того, сколько вам нужно), затем во время выполнения приложения передайте им задачи, как только они появятся, а затем при выходе из приложения или на некоторых других важных этапах завершите работу. исполнители?
Я хотел бы получить ответ от некоторых опытных программистов, которые пишут много асинхронного кода с использованием ExecutorServices.
Второй вопрос, немного меньше сделок с платформой Android. Если некоторые из вас скажут, что не стоит каждый раз закрывать исполнителей, и вы программируете на Android, не могли бы вы рассказать, как вы справляетесь с этими выключениями (а точнее - когда вы их выполняете), когда мы имеем дело с различными событиями жизненный цикл приложения.
Из-за комментария CommonsWare я сделал пост нейтральным. Я действительно не заинтересован в том, чтобы спорить об этом до смерти, и, кажется, это ведет там. Меня интересует только то, что я спросил у опытных разработчиков, если они хотят поделиться своим опытом. Благодарю.