Это альтернативное решение более низкого уровня. Затем вышеупомянутый исполнитель NotifyingBlocking - он, вероятно, не так идеален, но будет прост в реализации
Если вы хотите, чтобы в режиме ожидания было много потоковтогда вам в конечном итоге понадобится механизм, чтобы они знали, когда можно «ожить».Это звучит как случай для семафоров.
Убедитесь, что каждый поток не выделяет ненужной памяти, прежде чем он начнет работать.Затем выполните следующие действия:
1) создайте n потоков при запуске приложения, сохраненных в очереди.Вы можете основывать это n на результате Runtime.getMemory (...), вместо того, чтобы жестко его кодировать.
2), также создав семафор с разрешениями nk.Опять же, основывайте это на количестве доступной памяти.
3) теперь пусть каждый из nk-потоков периодически проверяет, есть ли у семафора разрешения, вызывая, например, Thread.sleep (...) между проверками.
4) если поток замечает разрешение, обновите семафор и получите разрешение.
Если это удовлетворяет вашим потребностям, вы можете продолжить управление потоками с помощью более сложного опроса илимеханизм ожидания / блокировки позже.