powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
25 сообщений из 27, страница 1 из 2
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396653
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
class Foo {
   private Object lock = new Object();

    public void handle(Object o) {
       System.out.println(lock);
    }
}



Может ли вывестись null?
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396726
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

В теории может, если handle будет вызван из другого потока, поэтому лучше поля для многопоточного использования всегда объявлять как final.

На практике я бы и сам не отказался посмотреть на пример инициализированного в конструкторе поля класса, которое читается как null :-). Не уверен, что на x86 такое можно воспроизвести.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396746
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Может
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396842
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, и тут тоже пишут, что может

http://stackoverflow.com/a/16062451/2674303
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396843
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если

Код: java
1.
2.
3.
4.
5.
6.
7.
class Foo {
   private volatile Object bar = new Object();

    public void handle() {
       System.out.println(bar);
    }
}
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396849
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
В таком виде нет
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396957
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а volatile и final в конструкторе даёт нам таки одинаковые гарантии? то есть freeze action позволяет увидеть во всю глубину из volatile ссылки как минимум на момент завершения конструктора?

В обычном же случае мы можем доверять только самой volatile ссылке
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396967
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запись в volatile создаст h-b барьер и не позволит записать адрес экземпляра Foo до этого присвоения в потоке в котором идет создание экземпляра. Но не более того. Гарантии на остаток цепочки конструкторов у наследника никто не предоставляет.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396980
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевЗапись в volatile создаст h-b барьер и не позволит записать адрес экземпляра Foo до этого присвоения в потоке в котором идет создание экземпляра. Но не более того. Гарантии на остаток цепочки конструкторов у наследника никто не предоставляет.

Что Вы подразумеваете под цепочкой конструкторов?

Вопрос вообще касается больше разницы final vs volatile в конструкторе
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39396987
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
   private final Map map = new HashMap();
   {
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}



тут я уверен, что выведется 1.

а если так:
Код: java
1.
private volatile Map map



?
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397030
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerа volatile и final в конструкторе даёт нам таки одинаковые гарантии?
Сходи в соседней ветке по ссылке, затем оттуда по ссылке в коментарии исходного кода. Особенно в тот, что под номером 2.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397038
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestionerа volatile и final в конструкторе даёт нам таки одинаковые гарантии?
Сходи в соседней ветке по ссылке, затем оттуда по ссылке в коментарии исходного кода. Особенно в тот, что под номером 2.

Так точно меня еще не посылали
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397044
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Ну есть такие понятия в ООП - предок-наследник. Генеришь одно, а оно уже по цепочке вызывает кучу другого.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397057
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВопрос вообще касается больше разницы final vs volatile в конструкторе
Если я ничего не путаю, то в JMM есть отсылка на описание процесса создание объекта. Так там JVM на момент размещения объекта в памяти захватывает блокировку по ее отпусканию структуре памяти этого объекта уже отведено место. Соответственно есть барьер не позволяющий увидеть ссылку до того как место занято. Так получилось, что инициализация final полей попала внутрь этого процесса. Поэтому грань должна быть после того как они инициализированы по стандарту. Volatile само по себе создает h-b грань.
Однако, как ты мог заметить из комментариев в коде, даже референсная JVM может поступать несколько по разному для разных платформ и видоизменять правила.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397082
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевЕсли я ничего не путаю, то в JMM есть отсылка на описание процесса создание объекта. Так там JVM на момент размещения объекта в памяти захватывает блокировку по ее отпусканию структуре памяти этого объекта уже отведено место. Соответственно есть барьер не позволяющий увидеть ссылку до того как место занято. Так получилось, что инициализация final полей попала внутрь этого процесса. Поэтому грань должна быть после того как они инициализированы по стандарту. Volatile само по себе создает h-b грань.
Однако, как ты мог заметить из комментариев в коде, даже референсная JVM может поступать несколько по разному для разных платформ и видоизменять правила.

Судя по всему путаете.
Есть два разных документа.
1. JMM . Там описано, что точно будет хорошо. Глава 9 содержит описание гарантий для final.
2. Руководство "как быстро напипать jvm и почти выполнить JMM". Именно "быстро" и "почти". Во-первых там описаны простые, но неоптимальные решения. Во-вторых там есть несколько ошибок (со слов Шипилёва на последнем joker). Поэтому эту книгу читать НЕЛЬЗЯ. Попытка понять, как будет что-то работать из кукбука приведёт к багам.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397124
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominЕсть два разных документа.
1. JMM . Там описано, что точно будет хорошо. Глава 9 содержит описание гарантий для final.

Если мы заменим слово блокировка на "final field safe context" - этого будет достаточно?
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397235
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот задаю конкретные вопросы, а ответы уводят в сторону)
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397250
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
questionerЯ вот задаю конкретные вопросы, а ответы уводят в сторону)
вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
   private volatile Map map = new HashMap();
   {
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}



вопрос:

Есть ли гарантия, что выведется 1 ?
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397255
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerquestionerЯ вот задаю конкретные вопросы, а ответы уводят в сторону)
вот код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
   private volatile Map map = new HashMap();
   {
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}


вопрос:
Есть ли гарантия, что выведется 1 ?

Нет.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397260
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
quot Alexey Tomin,

a так ведь есть, верно?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
   private final Map map = new HashMap();
   {
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397296
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

и так тоже нет

(смотрю с подозрением на ваш ник)
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397303
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class Foo {
   private final Map map;
   {
      map = new HashMap();
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}


для верного. :)
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397319
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerquot Alexey Tomin,

a так ведь есть, верно?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
   private final Map map = new HashMap();
   {
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}


Верно
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397325
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пиши
questioner
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class Foo {
   private volatile Map map;
   {
      final Map temp =  new HashMap();
      temp.put(1,1);
      map = temp;
    }
}


и жизнь станет проще.
А если менять потом не хочешь - то тоже самое, то final, а не volatile.

Хотя если тебя интересует как бы сделать иначе, чтоб пройтись по граблям и не словить - тогда читай сорцы.
...
Рейтинг: 0 / 0
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
    #39397330
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestioner
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class Foo {
   private final Map map;
   {
      map = new HashMap();
      map.put(1,1);
    }
    public void handle() {
       System.out.println(map.get(1));
    }
}


для верного. :)

Не уловил глубокой мысли из двух слов
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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