2015-07-31 2 views
0

Я использую java.util.ExecutorService для обработки задач, иногда только с одним рабочим. Не хотел бы добавлять что-то вроде простаивающих задач, предварительно загружать данные из базы данных и подобных материалов, пока ничего не происходит, и пользователь выбрал какой-то элемент.ExecutorService idle tasks

Моя первая идея состояла в том, чтобы просто добавить его в качестве задачи, когда пользователь что-то выбирает, потому что когда пользователь начинает взаимодействие с выбором, данные необходимы и должны быть загружены в любом случае.

Проблема с этим подходом заключается в том, что когда пользователь выбирает другой элемент, не делая что-то с первым выбором, тогда в Executor есть эта огромная задача, которая делает все медленнее.

Любые простые идеи, как я мог бы начать что-то подобное? Я действительно не хочу создавать огромный класс управления для его обработки и классифицировать задачи или подобные вещи.

+2

Просто для уточнения вашего вопроса: нужны ли какие-то приоритеты задач и выполняете задания с низким приоритетом (бездействием) только тогда, когда выполнение более важных задач не так много? – cichystefan

+0

На самом деле да, это именно то, что я хочу! Это звучит намного проще, чем то, что я имел в виду ... –

ответ

1

А как насчет использования PriorityBlockingQueue? Сохраняйте свои задачи в этой очереди, задавайте невыполненные задания с низким приоритетом, чтобы они всегда находились в конце очереди. Внедрите свои пулы в пул, чтобы они просто перенесли задачу с наивысшим приоритетом из очереди и выполнили ее.

Чтобы убедиться, что выполнение незанятых задач будет заменено более важными, вы можете реализовать их для выполнения в коротких кусках и помещать их обратно в очередь после завершения каждого фрагмента. Если что-то более важно было помещено в очередь тем временем, оно будет принято следующим образом, если нет, то из очереди будет снова возвращаться задача ожидания.