powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
4 сообщений из 4, страница 1 из 1
Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
    #38841849
Antipich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изучал тут на досуге исходники java.util.concurrent.LinkedBlockingQueue
И заметил там такую штуку:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 public boolean More ...offer(E e) {
354        if (e == null) throw new NullPointerException();
355        final AtomicInteger count = this.count;
356        if (count.get() == capacity)
357            return false;
358        int c = -1;
359        final ReentrantLock putLock = this.putLock;
360        putLock.lock();
361        try {
362            if (count.get() < capacity) {
363                insert(e);
364                c = count.getAndIncrement();
365                if (c + 1 < capacity)
366                    notFull.signal();
367            }
368        } finally {
369            putLock.unlock();
370        }
371        if (c == 0)
372            signalNotEmpty();
373        return c >= 0;
374    }


При этом переменная this.putLock, которая используется в 359 строке объявлена так в этом классе:
Код: java
1.
105    private final AtomicInteger count = new AtomicInteger(0);


Вопрос, зачем они создают эту локальную переменную в 359 строке, почему просто далее в методе вместо локальной переменной count не использовать this.count? Чтобы именно как final внутри метода объявить, чтобы не изменить ее случаем внутри? Вроде по части разруливания ее между потоками тут какого-то подсмысла нет, или я не прав?
...
Рейтинг: 0 / 0
Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
    #38841854
Antipich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, всегда имел ввиду объявление локальной переменной count в 355 строке, а не putLock :) Просто ситуация там по ним одинаковая и я опечатался.
...
Рейтинг: 0 / 0
Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
    #38841883
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antipich,

Не стоит изучать исходники java.* как пример для использования. Особенно в concurrent присутствует масса тонких оптимизаций которые существуют только потому что внутри самой JVM что-то так работает. Ответ на многие вопросы к такому коду - "а Goetz его знает".
...
Рейтинг: 0 / 0
Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
    #38841895
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntipichВопрос, зачем они создают эту локальную переменную в 359 строке, почему просто далее в методе вместо локальной переменной count не использовать this.count? Чтобы именно как final внутри метода объявить, чтобы не изменить ее случаем внутри? Вроде по части разруливания ее между потоками тут какого-то подсмысла нет, или я не прав?
Обращение к локальной переменной быстрее чем к полю. Классы java.util.concurrent разрабатываются с целью использования в высоконагруженых участках кода. Так как при низкой конкурентности особой нужды в них может и не быть.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем локальная переменная(исходники java.util.concurrent.LinkedBlockingQueue)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]