#java #android
#java #Android
Вопрос:
Я использую Executors.newFixedThreadPool для запуска потока каждые две минуты, и поток отправляет данные на сервер.
Через некоторое время не будет никаких данных для отправки. В этом случае как мне завершить работу пула. Могу ли я инициировать завершение работы пула из того же потока, который запускается через ThreadPool
Код :
ScheduledThreadPool = исполнители.newScheduledThreadPool(5);
Runnable runnable = new Runnable() {
@SuppressLint("ShowToast")
public void run() {
Log.e("Thread Pool -1 is running", "ThreadPool-1");
sendDataToServer();
}
};
scheduledThreadPool.scheduleWithFixedDelay(runnable, INITIAL_DELAY,
DELAY, TimeUnit.SECONDS);
}
Комментарии:
1. можете ли вы опубликовать свой поток, который динамически добавляется в пул.
2. вы хотите, чтобы весь пул был остановлен или только 1 выполнялся?
3. Я хочу, чтобы весь пул был остановлен
4. Сам пул ничего не делает. Создаваемые им фьючерсы выполняют задание, поэтому вы должны остановить их, а не пул. Просто сохраните ссылку на созданные вами фьючерсы, а затем отмените их при необходимости.
Ответ №1:
Сохраните запланированное будущее для дальнейшего использования.
final ScheduledFuture<?> scheduledFuture = scheduledThreadPool.scheduleWithFixedDelay(runnable, INITIAL_DELAY,
DELAY, TimeUnit.SECONDS);
Чтобы отменить, вызовите метод cancel(boolean) в будущем:
scheduledFuture.cancel(true);
Вам нужно будет сохранить все фьючерсы, которые вы создадите из пула, чтобы иметь возможность отменить позже.