Java CachedThreadPool против FixedThreadPool для многопоточного сервера - PullRequest
0 голосов
/ 09 января 2019

У меня есть сервер, который постоянно прослушивает клиентские соединения и создает новый поток каждый раз, когда клиент подключается для обработки ввода-вывода этого клиента. Прямо сейчас у меня есть несколько классов, которые реализуют Runnable и имеют цикл while в методе run, который продолжает работать, пока клиент не будет закрыт. Я создаю новый объект Thread и передаю runnable этому объекту. Я уверен, что есть и другие, более эффективные способы сделать это. Должен ли я переключиться на cachedThreadPool или fixedThreadPool или что-то еще?

1 Ответ

0 голосов
/ 09 января 2019

Я бы рекомендовал использовать Executors#cachedThreadPool, если размер клиентов не определен.

Документация Executors#cachedThreadPool:

* Creates a thread pool that creates new threads as needed, but
* will reuse previously constructed threads when they are
* available.  These pools will typically improve the performance
* of programs that execute many short-lived asynchronous tasks.
* Calls to {@code execute} will reuse previously constructed
* threads if available. If no existing thread is available, a new
* thread will be created and added to the pool. Threads that have
* not been used for sixty seconds are terminated and removed from
* the cache. Thus, a pool that remains idle for long enough will
* not consume any resources.

Документация Executors#fixedThreadPool:

* Creates a thread pool that reuses a fixed number of threads
* operating off a shared unbounded queue.  At any point, at most
* {@code nThreads} threads will be active processing tasks.
* If additional tasks are submitted when all threads are active,
* they will wait in the queue until a thread is available.

Так что, если вы не уверены, что именно вам, например, нужно 5 потоков, вам не следует использовать Executors#fixedThreadPool.

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