#java #multithreading
#java #многопоточность
Вопрос:
Я использую пул потоков для выполнения задач в фоновом режиме моего приложения. Однако некоторые из моих задач тяжелее других. Итак, я хотел бы ограничить тяжелые задачи определенным подмножеством пула потоков, тем самым оставив по крайней мере несколько потоков открытыми для выполнения любых легких задач.
Есть ли простой способ сделать это?
Ответ №1:
Самый простой способ — использовать отдельные пулы потоков для разного «веса задач».
Даже вы можете создать отдельный класс, который предоставляет отдельные методы для разных задач.
Ответ №2:
Как было сказано, самый чистый способ — использовать отдельный пул потоков для тяжелых потоков.
Другой способ — использовать семафор. Создайте семафор с числом, равным, например, трем. Тяжелые потоки должны сначала получить () это. Только три тяжелых могли бы это сделать. Остальное будет ждать (или завершится неудачей, если вы используете tryAcquire()).
Конечно, поток должен «знать», что он «тяжелый». Для сторонних потоков это не работает, поэтому снова смотрите подход «два пула». 🙂