#java #spring #threadpoolexecutor
Вопрос:
В моем приложении spring у меня есть менеджер пула потоков, который во время запуска() создает несколько потоков и добавляет их в пул. Но при запуске метод start() никогда не выполняется.
@Component public class ThreadPoolManager implements SmartLifecycle { private static final Logger logger = LoggerFactory.getLogger(ThreadPoolkManager.class); ScheduledExecutorService httpCheckPool = Executors.newScheduledThreadPool(10); @Override public void start() { /** * Start some threads */ } @Override public void stop() { httpCheckPool.shutdown(); } @Override public boolean isRunning() { return !httpCheckPool.isTerminated(); } public synchronized void addServiceToCheck(NewService service){ /** * Add service to the threadpool */ }
Любая помощь будет очень признательна.
Комментарии:
1. Решен ли этот вопрос ? Если да, пожалуйста, отметьте это как решенное с помощью специальной кнопки и объясните свое решение 🙂
Ответ №1:
Это для тех, кто сталкивается с подобной проблемой. isRunning()
вызывается раньше start()
, поэтому убедитесь isRunning()
false
, что сначала возвращается, а затем только start()
выполняется. Простой способ сделать это-использовать флаг.