private final BlockingQueue executorQueue = new ArrayBlockingQueue<>(20); private final ThreadPoolExecutor executor = new ThreadPoolExecutor(4,4,5, TimeUnit.MINUTES, executorQueue); @PostConstruct public void startExecutor() { executor.prestartAllCoreThreads(); } public void manageRequest(Request request) { log.info("Start manage request {}", request.getRequestId()); executorQueue.add(() -> { // do something }); }