powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос на засыпку: это безопасная публикация или нет?
9 сообщений из 59, страница 3 из 3
Вопрос на засыпку: это безопасная публикация или нет?
    #38632277
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01schwa пропущено...

Зачем нужен фриз, если есть старт потока, который создает hb по JMM?


hb не транзитивен с freeze hb
Это здесь не причем т.к. в коде this не утекает.
JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока).
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38632287
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вопрос на засыпку. А почему этот freeze не транзитивен с hb? Почему его определили именно так, а не сделали транзитивным?
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38632444
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaЭто здесь не причем т.к. в коде this не утекает.
JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока).
Только есть нюанс - там явная публикация this до окончания инициализации.
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633191
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевschwaЭто здесь не причем т.к. в коде this не утекает.
JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока).
Только есть нюанс - там явная публикация this до окончания инициализации.
Запись в поля в данном случае будет до публикации ссылки т.к. между ними есть операция старта потока, для которой есть гарантии в JMM.
Какие есть основания полагать, что JMM имеет особую семантику не только для записей/чтений final полей, но и для старта потока в конструкторе?
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633243
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaЗапись в поля в данном случае будет до публикации ссылки т.к. между ними есть операция старта потока, для которой есть гарантии в JMM.
Запись полей, это не "безопасная публикация".
IMHO объект "безопасно опубликован" тогда, когда помимо всего прочего, ни один читатель публикации не сможет обратиться к нему до завершения работы всей цепочки конструкторов.
В примере
Код: java
1.
2.
3.
4.
public Test() {
    this(1,2);
    new Thread(new MyRunnable(this)).start();
 }



Публикация безопасна для класса Test, но не для ... extends Test .
И гарантии по поводу старта потока здесь не причем.
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633440
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Вот только про extends изначально слов не было.

Это как спросить человека написать бинарный поиск по массиву интов, а потом сказать, что его код не работает т.к. у него не учтен случай переполнения. Хотите полный ответ? Давайте больше контекста.
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633461
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwaНу и вопрос на засыпку. А почему этот freeze не транзитивен с hb? Почему его определили именно так, а не сделали транзитивным?

Да и почему ?
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633507
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Честно говоря, вообще странно рассуждать о транзитивности final HB. Ведь что такое final? Это просто отсечение всех значений переменной, которые она имела до выхода из конструктора.
То есть, если у нас есть int, которому мы в разное время работы программы присваивали значения [1, 2, 3, 4, 5], то согласно JMM обычное чтение этой переменной может вернуть [0, 1, 2, 3, 4, 5]. Если же, например, в конструкторе мы присваивали этому полю значения [1, 2, 3], а в момент выхода из конструктора эта переменная была достижима из final поля, и была равна 3, то теперь обычное чтение может вернуть [0, 1, 2, 3, 4, 5] - [0, 1, 2] = [3, 4, 5]. Все, на этом HB заканчивается. Его просто напросто не с чем "транзитивить".
...
Рейтинг: 0 / 0
Вопрос на засыпку: это безопасная публикация или нет?
    #38633537
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoachЧестно говоря, вообще странно рассуждать о транзитивности final HB. Ведь что такое final? Это просто отсечение всех значений переменной, которые она имела до выхода из конструктора.
То есть, если у нас есть int, которому мы в разное время работы программы присваивали значения [1, 2, 3, 4, 5], то согласно JMM обычное чтение этой переменной может вернуть [0, 1, 2, 3, 4, 5]. Если же, например, в конструкторе мы присваивали этому полю значения [1, 2, 3], а в момент выхода из конструктора эта переменная была достижима из final поля, и была равна 3, то теперь обычное чтение может вернуть [0, 1, 2, 3, 4, 5] - [0, 1, 2] = [3, 4, 5]. Все, на этом HB заканчивается. Его просто напросто не с чем "транзитивить".

А Вы почитайте JLS и попробуйте доказать что после применения всех dereferences and memory chain мы таки не увидим дефолтного значения в final

Я так и не доказал это )))
...
Рейтинг: 0 / 0
9 сообщений из 59, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос на засыпку: это безопасная публикация или нет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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