Я использую @Scheduled(fixedDelay=2000)
для одного из моих методов. Этот метод будет запускаться каждые 2 секунды, чтобы проверить, насколько велика очередь Thread, и если она будет меньше определенного числа, это создаст новые рабочие потоки.
У меня есть класс конфигурации Asyn c, как показано ниже
@Configuration
@ManagedResource
public class ExecutorConfig {
@Bean(name = "detailsScraperExecutor")
public ThreadPoolTaskExecutor getDetailsAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(100);
// executor.setMaxPoolSize(5);
executor.setQueueCapacity(1000000);
executor.setThreadNamePrefix("detailsScraperExecutor-");
executor.initialize();
return executor;
}
}
Ниже мой класс DetailScraper, который содержит метод, который запускается каждые 2 секунды
@Service
public class DetailsScraper {
@Autowired
@Qualifier("detailsScraperExecutor")
private Executor detailsScraperExecutor;
@Autowired
private DetailsScraperAsync scraper;
@Scheduled(fixedDelay=2000)
public void scrapeDetails() {
System.out.println("Pool size: " + ((ThreadPoolTaskExecutor) detailsScraperExecutor).getThreadPoolExecutor().getQueue().size());
if (((ThreadPoolTaskExecutor) detailsScraperExecutor).getThreadPoolExecutor().getQueue().size() < 3) {
System.out.println("NEED TO INCREASE!");
for (int i = 0; i < 5; i++) {
scraper.run("");
}
} else {
System.out.println("NO NEED");
}
}
}
И ниже класс потока
@Service
public class DetailsScraperAsync {
@Async("detailsScraperExecutor")
public void run(String string) {
try {
System.out.println("IN WORKER THREAD");
Thread.sleep(999999999);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
Ниже приведен результат когда я запускаю приложение
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Pool size: 0
NEED TO INCREASE!
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
IN WORKER THREAD
Почему размер пула отображается равным нулю при каждом запуске метода scrapeDetails
?