Получить объекты Runnable, которые я запланировал с помощью ScheduledThreadPoolExecutor при использовании метода shutdownNow () - PullRequest
5 голосов
/ 21 января 2011

Я использую ScheduledThreadPoolExecutor.schedule (Runnable, int, TimeUnit), чтобы запланировать некоторые объекты класса, реализующего Runnable.

В какой-то момент мое приложение закрывается, и я использую ScheduledThreadPoolExecutor.shutdownNow () .Согласно документации он возвращает список ScheduledFuture's.

Что я действительно хочу сделать, так это взять объект, который я изначально запланировал, и получить от него немного данных, которые я затем выведу, говоря, что он не может быть выполнен.Затем это позже будет использоваться приложением для попытки выполнить его, когда приложение затем снова запустится.

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Обычный способ получения информации об объектах, переданных исполнителю, состоит в том, чтобы поддерживать указатель на исходные объекты (будь то расширения Callable, Runnable и т. Д.).После того, как вы вызвали shutdownNow () и приняли во внимание Runnable, возвращенный тем, кто ожидал выполнения , вы можете использовать это, чтобы удалить исходный список объектов и просто опросить те, которые действительно были запущены.*

1 голос
/ 21 января 2011

Если вы просто хотите представить информацию пользователю, простейшим подходом может быть реализация значимого метода toString() для планирования Runnable. Затем вы можете просто перебрать список, который вам дает Executor, и записать, что вы получаете.

Но печальная правда в том, что ваши оригинальные объекты обернуты Executor. Затем вам нужно будет сохранить список того, что вы передаете Executor вручную, и позволить Runnable s удалить себя из этого списка, когда они будут выполнены. Очевидно, что для этой цели вам потребуется использовать потокобезопасный список.

...