Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли смысл помечать final приватное поле с точки зрения vidibility ? / 25 сообщений из 27, страница 1 из 2
01.02.2017, 18:39
    #39396653
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Код: 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
01.02.2017, 19:56
    #39396726
scf
scf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
questioner,

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

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

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

Код: 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
02.02.2017, 00:40
    #39396849
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
questioner,
В таком виде нет
...
Рейтинг: 0 / 0
02.02.2017, 09:22
    #39396957
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
а volatile и final в конструкторе даёт нам таки одинаковые гарантии? то есть freeze action позволяет увидеть во всю глубину из volatile ссылки как минимум на момент завершения конструктора?

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

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

Вопрос вообще касается больше разницы final vs volatile в конструкторе
...
Рейтинг: 0 / 0
02.02.2017, 09:49
    #39396987
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Код: 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
02.02.2017, 10:39
    #39397030
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
questionerа volatile и final в конструкторе даёт нам таки одинаковые гарантии?
Сходи в соседней ветке по ссылке, затем оттуда по ссылке в коментарии исходного кода. Особенно в тот, что под номером 2.
...
Рейтинг: 0 / 0
02.02.2017, 10:50
    #39397038
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Сергей Арсеньевquestionerа volatile и final в конструкторе даёт нам таки одинаковые гарантии?
Сходи в соседней ветке по ссылке, затем оттуда по ссылке в коментарии исходного кода. Особенно в тот, что под номером 2.

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

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

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

Если мы заменим слово блокировка на "final field safe context" - этого будет достаточно?
...
Рейтинг: 0 / 0
02.02.2017, 14:06
    #39397235
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Я вот задаю конкретные вопросы, а ответы уводят в сторону)
...
Рейтинг: 0 / 0
02.02.2017, 14:14
    #39397250
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
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
02.02.2017, 14:17
    #39397255
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
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
02.02.2017, 14:24
    #39397260
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
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
02.02.2017, 14:51
    #39397296
scf
scf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
questioner,

и так тоже нет

(смотрю с подозрением на ваш ник)
...
Рейтинг: 0 / 0
02.02.2017, 14:54
    #39397303
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
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
02.02.2017, 15:08
    #39397319
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
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
02.02.2017, 15:12
    #39397325
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Пиши
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
02.02.2017, 15:18
    #39397330
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли смысл помечать final приватное поле с точки зрения vidibility ?
Сергей Арсеньев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
Форумы / Java [игнор отключен] [закрыт для гостей] / Есть ли смысл помечать final приватное поле с точки зрения vidibility ? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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