Пул потоков завершения работы, полученный от исполнителей.newFixedThreadPool

#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);
 

Вам нужно будет сохранить все фьючерсы, которые вы создадите из пула, чтобы иметь возможность отменить позже.