Android / Java: как посмотреть и изменить пул потоков? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть база данных с 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);
}
...