Существует ли реализация ExecutorService с ограничением очереди и возможностью замены старых членов очереди новыми? - PullRequest
0 голосов
/ 31 августа 2018

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

1 Ответ

0 голосов
/ 31 августа 2018

Использование DiscardOldestPolicy:

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

и BlockingQueue с фиксированной емкостью:

int fixedThreadNumber = 10;
int idleSeconds = 10;

BlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<>(10);

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
        fixedThreadNumber,
        fixedThreadNumber,
        idleSeconds, TimeUnit.SECONDS, 
        blockingQueue, new ThreadPoolExecutor.DiscardOldestPolicy());

ExecutorService executor = threadPoolExecutor;
...