Java ThreadPool с размером пула 1 - PullRequest
1 голос
/ 21 июля 2010

Имеет ли смысл использовать ThreadPool с размером пула всего 1, чтобы просто перерабатывать один поток снова и снова для разных применений в приложении?Вместо того, чтобы выполнять новый поток (Runnable ()) и т. Д., А затем позволить сборщику мусора обрабатывать удаление потока, я подумал, что было бы более эффективно просто использовать этот поток для разных заданий, которые не нужно выполнять вместе.

Это то, что я сейчас делаю, чтобы определить 1 пул размера пула.

    private static int poolSize = 1;
private static int maxPoolSize = 1;
private static long keepAliveTime= 10;
private static final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100);
private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(poolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);

Ответы [ 5 ]

3 голосов
/ 21 июля 2010

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

Также использование Executors означает, что в будущем можно легко настроить параметры пула потоков, если это необходимо.

1 голос
/ 21 июля 2010

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

1 голос
/ 21 июля 2010

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

1 голос
/ 21 июля 2010

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

1 голос
/ 21 июля 2010

С new Thread(Runnable) вы можете выполнять N потоков одновременно. Это может быть преимуществом, но также может вызвать проблемы с синхронизацией.

При повторном использовании одного потока вы теряете возможность выполнять задачи параллельно, но вы избавлены от проблем синхронизации / параллелизма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...