Как я могу контролировать и фильтровать Java ThreadPoolExecutor на основе пользовательской логики? - PullRequest
0 голосов
/ 27 августа 2018

Я работаю в сборке проектов на основе Groovy на вершине JDK1.8.Я хотел бы представить собственную логику создания потоков, основанную на общей логике создания потоков и сумме всех активных потоков в разных пулах потоков.Я инициировал всех определенных потоков-пулов-executor в моем собственном классе сборки ThreadExecutor, как показано ниже,

for(ThreadPoolType threadPoolType:ThreadPoolType.values()) {
    executorServiceMap.put(threadPoolType, new ThreadPoolExecutor(
            minThreads,
            maxThreads,
            threadKeepAliveSec,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<Runnable>(8),
            new CustomizableThreadFactory("pool-${threadPoolType.getPoolName()}-thread-")))
}

В настоящее время мы установили фиксированное число размеров coreSize и maxThread для каждого пула, но это будет пулмудро отличается в реальной реализации.Вот как мы представляем нашу асинхронную задачу:

CompletableFuture<IchibaHttpResponse> post(A a, B b, Executor executor){
    return CompletableFuture.supplyAsync({
        return someExecutionHere(a, b);
    }, executor)
}

Что ж, теперь я хотел бы отслеживать общее количество активных потоков каждый раз, когда on_submit новая задача для исполнителя, и установить пороговый предел для максимальногоколичество активных потоков во всех потоковых пулах.Таким образом, я могу контролировать свои потоки не только с точки зрения максимального размера отдельного пула, но и общего количества потоков.Предположим, для моей оценки максимального размера пула из 4 потоков будет как A (20), B (40), C (60) и D (80).Так что в худшем случае это будет 200 потоков за раз, что может привести к снижению общей производительности системы.Итак, я хотел бы установить другую границу здесь, это предел total_thread_threashold 100. В этом случае для сценария, подобного A (15), B (30), C (35), D (10) = All (100), нетновый поток будет создан, если какое-либо задание отправлено, и для определенной очереди все еще свободна задача будет поставлена ​​в очередь или в противном случае она будет отброшена.Пожалуйста, дайте мне знать, если есть какая-то путаница в понимании моей озабоченности.Спасибо.

...