|
|
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
buldozer01schwa пропущено... Зачем нужен фриз, если есть старт потока, который создает hb по JMM? hb не транзитивен с freeze hb Это здесь не причем т.к. в коде this не утекает. JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 12:07 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Ну и вопрос на засыпку. А почему этот freeze не транзитивен с hb? Почему его определили именно так, а не сделали транзитивным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 12:21 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
schwaЭто здесь не причем т.к. в коде this не утекает. JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока). Только есть нюанс - там явная публикация this до окончания инициализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2014, 17:03 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевschwaЭто здесь не причем т.к. в коде this не утекает. JMM гарантирует, что поток видит действия, которые были сделаны в потоке, который его стартовал (действия, сделанные до старта потока). Только есть нюанс - там явная публикация this до окончания инициализации. Запись в поля в данном случае будет до публикации ссылки т.к. между ними есть операция старта потока, для которой есть гарантии в JMM. Какие есть основания полагать, что JMM имеет особую семантику не только для записей/чтений final полей, но и для старта потока в конструкторе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 13:38 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
schwaЗапись в поля в данном случае будет до публикации ссылки т.к. между ними есть операция старта потока, для которой есть гарантии в JMM. Запись полей, это не "безопасная публикация". IMHO объект "безопасно опубликован" тогда, когда помимо всего прочего, ни один читатель публикации не сможет обратиться к нему до завершения работы всей цепочки конструкторов. В примере Код: java 1. 2. 3. 4. Публикация безопасна для класса Test, но не для ... extends Test . И гарантии по поводу старта потока здесь не причем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 14:07 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Вот только про extends изначально слов не было. Это как спросить человека написать бинарный поиск по массиву интов, а потом сказать, что его код не работает т.к. у него не учтен случай переполнения. Хотите полный ответ? Давайте больше контекста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 15:58 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
schwaНу и вопрос на засыпку. А почему этот freeze не транзитивен с hb? Почему его определили именно так, а не сделали транзитивным? Да и почему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 16:11 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Честно говоря, вообще странно рассуждать о транзитивности 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 заканчивается. Его просто напросто не с чем "транзитивить". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 16:35 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
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 Я так и не доказал это ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2014, 16:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38632277&tid=2127225]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 510ms |

| 0 / 0 |
