Я читал об этом совсем немного за последние пару часов, и я просто не вижу никакой причины (действительной причины) позвонить shutdown()
на ExecutorService
, если у нас нет обширного приложения, которое хранит , десятки и десятки различных сервисов исполнителя, которые не используются в течение длительного времени.Причина вызова shutdown() на ExecutorService
Единственное (из того, что я собираю) выключение делает, делает то, что делает нормальная Thread, когда это делается. Когда нормальный поток завершит метод запуска Runnable (или Callable), он будет передан в Сбор мусора, который будет собран. С помощью службы Executor потоки будут просто приостановлены, они не будут отмечены галочкой для сбора мусора. Для этого требуется выключение.
Хорошо, на мой вопрос. Есть ли причина, по которой вызывать выключение на ExecutorService
очень часто или даже сразу после отправки ему некоторых задач? Я хотел бы оставить позади дело, которое кто-то делает, и сразу после этого звонит awaitTermination()
, поскольку это подтверждено. Как только мы это сделаем, мы снова должны воссоздать новый ExecutorService
, чтобы сделать то же самое. Разве не вся идея для ExecutorService
повторного использования потоков? Так зачем же разрушать ExecutorService
так скоро?
Разве это не рациональный способ просто создать ExecutorService
(или пару в зависимости от того, сколько вам нужно), то во время запуска приложения проходят к ним задачи после их прихода, а затем в выход приложения или некоторые другие важные этапы выключения этих исполнителей?
Я хотел бы получить ответы от некоторых опытных кодеров, которые пишут много асинхронного кода с помощью ExecutorServices.
Вторая сторона вопроса, немного меньшие сделки с платформой Android. Если некоторые из вас скажут, что это не самая лучшая идея для выключения исполнителей каждый раз, и вы программируете на android, не могли бы вы рассказать мне, как вы справляетесь с этими остановками (точнее, когда вы их выполняете), когда мы имеем дело с различными событиями жизненный цикл приложения.
Из-за комментария CommonsWare я сделал сообщение нейтральным. Мне действительно не интересно спорить об этом до смерти, и кажется, что она ведет туда. Меня интересует только то, что я спросил у опытных разработчиков, если они хотят поделиться своим опытом. Благодарю.
«Я вижу много раз образцы кодов, в которых все время происходит вызов shutdown() сразу после отправки или выполнения задач» - не стесняйтесь используйте гиперссылки, чтобы предоставить доказательства ваших требований. Лично я никогда не видел никаких «примеров кодов», которые делают то, что вы заявляете. Возможно, вы что-то неправильно истолковываете, и мы можем только указать это вам, если мы знаем, какие «образцы кода» вы изучаете. – CommonsWare
Привет CommonsWare. Прежде всего, я вижу агрессивный тон вашего (или так кажется) ко мне, который, я думаю, не подтвержден здесь. Я не пытался изображать людей отрицательным образом. Что касается вашей цитаты, я в основном говорил о выпуске «Мышление в Java IV», «Многозадачность». Вы можете найти много примеров этого в примерах Брюса Эккела. Они в основном простые, но, тем не менее, впечатление, которое наложил на меня Брюс, было очень часто отключать работу. В любом случае, вы сосредоточились на чем-то, что не было основной частью моего поста. Я удалил эти части, потому что я действительно не хочу спорить об этом. – Lucas
hay @CommonsWare in Thinking in java book by Bruce Eckel..in concurrency/Executor page 804 Четвертое издание, он всегда использует метод shutdown() сразу после отправки или выполнения задач в простых приложениях, чтобы проиллюстрировать, как Исполнитель работает, как сказал Лукас. – Error