Может ли кто-нибудь рассказать мне пример реальной жизни, где удобно использовать [фабричный метод newSingleThreadExecutor()
], а не другие?
Я предполагаю, что вы спрашиваете, когда используете однопоточный пул потоков, а не пул фиксированных или кэшированных потоков.
Я использую однопоточный исполнитель, когда у меня много задач для запуска, но мне нужен только один поток. Это то же самое, что использовать фиксированный пул потоков 1, конечно. Часто это происходит из-за того, что нам не нужно, чтобы они запускались параллельно, это фоновые задачи, и мы не хотим использовать слишком много системных ресурсов (CPU, memory, IO). Я хочу иметь дело с различными задачами как Callable
или Runnable
объектов, поэтому ExecutorService
является оптимальным, но все, что мне нужно, это один поток для их запуска.
Например, у меня есть несколько заданий таймера, которые я вставляю. У меня есть два типа задач, и мои «короткие» задачи выполняются в одном пуле потоков. Существует только один поток, который выполняет их все, хотя в моей системе есть несколько сотен. Они выполняют рутинные задачи, такие как проверка дискового пространства, очистка журналов, статистика демпинга и т. Д. Для задач, критически важных по времени, я запускаю пул кэшированных потоков.
Другим примером является то, что у нас есть ряд задач интеграции партнеров. Они не занимают очень много времени, и они работают довольно редко, и мы не хотим, чтобы они конкурировали с другими системными потоками, поэтому они запускались в одном поточном исполнителе.
Третий пример состоит в том, что у нас есть машина конечного состояния, где каждый из мутантов состояния переносит задание из одного состояния в другое и регистрируется как Runnable
в одном пуле потоков. Несмотря на то, что у нас есть сотни мутаторов, только одна задача действительна в любой момент времени, поэтому нет смысла выделять более одного потока для задачи.
Зачем вам нужен только один поток? – Rollerball
Потому что мы не хотим, чтобы они запускались параллельно и потребляли слишком много ресурсов процессора @Rollerball. Я добавил еще один пример, который показывает это. – Gray
Спасибо, очень понятно. – Rollerball