- получить пользовательские транзакции (50–100 потоков, очередь 300)
- получить семейство пользователей (10–50 потоков, очередь 100)
Как это следует перенести на Java 21? Можно ли еще реализовать эту логику «пропустить эту задачу, если очередь заполнена»?
Пример:
private ThreadPoolTaskExecutor getExecutor(AsyncProperties executorProperties, ContextDataDecorator contextDataDecorator) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setVirtualThreads(executorProperties.isVirtual());
executor.setTaskDecorator(contextDataDecorator);
executor.setCorePoolSize(executorProperties.getPoolSize());
executor.setMaxPoolSize(executorProperties.getPoolSize());
executor.setThreadNamePrefix(executorProperties.getThreadNamePrefix());
executor.setRejectedExecutionHandler((runnable, threadPoolExecutor) -> log.warn("Task {} was skipped by executor {}", runnable, threadPoolExecutor));
if (executorProperties.hasQueueCapacity()) {
executor.setQueueCapacity(executorProperties.getQueueCapacity());
}
executor.initialize();
return executor;
}
конфигурации:
transactions.executor:
pool-size: 100
thread-name-prefix: transactions-async-executor-
queue-capacity: 200
virtual: true
family.executor:
pool-size: 50
queue-capacity: 100
thread-name-prefix: family-async-
Подробнее здесь: https://stackoverflow.com/questions/797 ... al-threads
Мобильная версия