2013-08-14 1 views
2

Возможно ли иметь один пул потоков для всей моей программы, чтобы потоки были повторно использованы, или мне нужно сделать глобальную команду ExecutorService/передать ее всем объектам, использующим ее.Как повторно использовать темы с различными объектами ExecutorService?

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

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); 

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

Есть ли лучшая альтернатива созданию пула потоков в глобальном масштабе?

+0

Вы уверены, что вам нужны темы? Если задачи очень просты, то делайте их в своем потоке. – Tala

+0

Задачи должны быть запланированы и выполняться асинхронно. Я не думаю, что есть какая-то альтернатива. – benehsv

+0

C# использует глобальный пул потоков, оставляя программистам возможность создавать другие пулы. Я бы сказал, что это хорошее решение. Если вам нужен глобальный исполнитель, просто создайте фабрику singleton, на которой будет размещен пул потоков. –

ответ

3

Как повторно использовать темы с различными объектами ExecutorService?

Невозможно повторно использовать потоки в разных пулах потоков ExecutorService. Конечно, вы можете представить совершенно разные типы классов Runnable в общий поток.

Есть ли лучшая альтернатива созданию пула потоков в глобальном масштабе?

У меня нет проблемы с «глобальным» пулом потоков в вашем приложении. Кто-то должен знать, когда позвонить по телефону shutdown(), но это единственная проблема, с которой я вижу. Если у вас много разрозненных классов, которые отправляют задачи, все они могут получить доступ к этому набору (или 1) общих фоновых потоков.

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^