Элегантная реализация индикаторов длины очереди в ExecutorServices

Почему нетjava.util.concurrent обеспечить показатели длины очереди для егоExecutorServices? Недавно я обнаружил, что делаю что-то вроде этого:

ExecutorService queue = Executors.newSingleThreadExecutor();
AtomicInteger queueLength = new AtomicInteger();
...

public void addTaskToQueue(Runnable runnable) {
    if (queueLength.get() < MAX_QUEUE_LENGTH) {
        queueLength.incrementAndGet(); // Increment queue when submitting task.
        queue.submit(new Runnable() {
            public void run() {
                runnable.run();
                queueLength.decrementAndGet(); // Decrement queue when task done.
            }
        });
    } else {
        // Trigger error: too long queue
    }
}

Что работает хорошо, но ... Я думаю, что это действительно должно быть реализовано как частьExecutorService, Это глупо и подвержено ошибкам носить с собой счетчикотделенный из фактической очереди, длину которой должен указывать счетчик (напоминает мне о C-массивах). Но,ExecutorServiceПолучаются с помощью статических фабричных методов, так что нет способа просто расширить отличный в другом случае однопоточный исполнитель и добавить счетчик очереди. И что же мне делать:

Изобретать вещи, уже реализованные в JDK?Другое умное решение?

Ответы на вопрос(2)

Ваш ответ на вопрос