Должен ли я использовать фреймворк Executors, если есть преимущества для его использования, или я должен просто поместить свои потоки в ArrayList?
Много людей развивают и управляют своими потоками. Тем не менее, основная причина, почему классы ExecutorService
настолько сильно рекомендованы, так это то, что они заботятся об управлении потоками и связанными с ними задачах и уменьшают количество кода, который вы должны писать, отлаживать, поддерживать. Очевидно, они предоставляют множество других функций, таких как поддержка Callable
, услуги по завершению и т. Д., Которые вы не можете использовать. Но оставить управление этими основными классами, даже для простого проекта, само по себе хорошо. Я использую их даже для однопоточных пулов, потому что я хочу, чтобы функции очереди задач Runnable
пула потоков вместо того, чтобы писать собственный BlockingQueue
или другой механизм.
если я добавляю 6 потоков, я хочу, чтобы все 6 работали одновременно.
Тогда вы должны использовать Executors.newCachedThreadPool()
. Если вы отправите 6 заданий (экземпляр Runnable
или Callable
), то через него начнут обрабатываться 6 потоков. Если 3 задания заканчиваются и другие задания подаются, тогда 3 неактивных потока будут запускать другие задания.
ПРИМЕЧАНИЕ: если вы отправляете 1000 заданий, вы начнете 1000 потоков, которые, скорее всего, не, что вы хотите сделать.
Например, чтобы написать это самостоятельно будет принимать гораздо больше код:
// a pool of 10 threads
ExecutorService threadPool = Executors.newFixedThreadPool(10);
// submit a bunch of jobs to they 10 threads for processing
for (MyJob job : jobsToDo) {
threadPool.submit(job);
}
// no more tasks are being submitted so shutdown the pool
threadPool.shutdown();
// wait for the jobs to finish
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
Весь смысл рамок Исполнители заключается в обеспечении лучшего контроля над управления threads.If вы думаете, есть что вы могли бы повторно использовать эти потоки в будущем контексте, тогда я бы рекомендовал использовать cachedThreadPool, иначе просто No – Phani
они будут работать до тех пор, пока я не скажу им, чтобы все остановились, это не похоже на то, что кто-то перейдет в состояние ожидания или должен быть кэшированный для последующего использования. – amphibient
Лучше работать с классами Core тогда. – Phani