У меня есть база данных с URL, которые я бы хотел постоянно сканировать . количество записей может варьироваться , поэтому мне приходится время от времени удалять и / или добавлять темы.
Поток никогда не останавливается сам по себе (специально), потому что, когда сканирование завершено, он ждет 1 секунду и сканирует снова.
Кажется, это работает нормально.
Проблема 1 : мне нужно изменить потоки, когда что-то изменилось в базе данных (это может быть отложено).
Проблема 2 : Проверяющая часть (while ...
) никогда не выполняется, пока работает ThreadPool.
Мой текущий подход к решению - проверять каждую минуту на наличие изменений, и если что-то изменилось, я закрываю пул и вызываю новые потоки.
Вопрос 1 : Как я могу запустить контрольную часть параллельно?
Вопрос 2 : Есть ли лучший подход? (мои знания Java довольно просты)
Заранее спасибо!
// Simplified:
ExecutorService executorService;
// Create threads based on the current database records
Collection<CheckNewsFeedThread> threads = new ArrayList<>();
threads.addAll(checkNewsFeedThreadCollection);
if (threads.size() > 0) {
// Create a pool of threads and execute them for the first time
executorService = Executors.newFixedThreadPool(threads.size());
executorService.invokeAll(threads);
}
// PROBLEM: this code will be executed when the executorService
// shuts down, but I'd like to run it in parallel
while(true) {
if (recordsChanged) {
// interrupt the current threads
executorService.shutdown();
// update checkNewsFeedThreadCollection
threads.removeAll();
threads.addAll(checkNewsFeedThreadCollection);
if (threads.size() > 0) {
executorService.invokeAll(threads);
}
}
Thread.sleep(60000);
}