Ключ к шаблонам - это не только один.
Звучит так, как будто вы хотите TaskListener
, который прослушивает события taskStarted
и taskFinished
, которые могут использовать TaskProfiler
, который будет определять, завершился ли этот Task
за соответствующее время. (Может также потребоваться Visit
Task
, чтобы выяснить более подробную информацию об этом, если ваши пороговые значения не одинаковы для всех задач)
Оттуда это звучит так, как будто вы хотите TaskExecutor
, который уведомит TaskListener
, когда он начнет и завершит определенную задачу.
TaskExecutor
может сделать доступными increaseWorkerPool
и decreaseWorkerPool
методы, которые можно настроить с помощью TaskAdministrator
, который получает обратную связь от профилировщика / слушателя.
Это в основном демонстративно, вы можете просто передать время завершения задачи как часть одного taskComplete(Task task, long millis)
метода.
Все сказанное "порождает потоки, пока они не работают очень хорошо", не самая эвристическая из техник балансировки нагрузки ...