Подсчет количества активных запросов без блокировки - PullRequest
1 голос
/ 08 апреля 2011

На веб-сервере Java я хотел бы знать, есть ли какие-либо активные веб-запросы.

Моей первой идеей было что-то вроде:

    public static AtomicInteger count = new AtomicInteger();

    public void processRequest() {
        count.incrementAndGet();
        // process my request
        count.decrementAndGet();
    }

    public boolean areThereActiveRequests() {
        return 0 == count.get();
    }

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

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

Есть идеи?

1 Ответ

0 голосов
/ 08 апреля 2011

Ваши веб-запросы не будут блокировать друг друга в ожидании блокировки, поскольку AutomicInteger не требует никаких блокировок и использует примитив аппаратной синхронизации.

Проверьте это для подробностей

Поэтому ваш текущий код выглядит хорошо для проблемы, которую вы пытаетесь решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...