|
|
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
questionerто есть надо делать так, чтобы к моменты выполнения конструктора все филды уже были инициализированы ? А нафиг тогда конструктор? :) А еще есть @PostConstruct ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:21 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНет. Надо делать так чтобы другие потоки не могли видеть объект до окончания его инициализации. Т.е. конструкторы только private, а генератор через статику, коя есть зло если верить соседнему треду. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:24 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Т.е. конструкторы только private Видимость конструтора на публикацию не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:29 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczНет. Надо делать так чтобы другие потоки не могли видеть объект до окончания его инициализации. Я читаю это следующим образом: -как выкопать картошку ? -Чтобы выкопать картошку надо выкопать картошку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:34 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
questionerЯ читаю это следующим образом: -как выкопать картошку ? -Чтобы выкопать картошку надо выкопать картошку. Бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:36 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, судя по всему просто не надо в конструкторе ничего такого делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 16:53 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевquestionerто есть надо делать так, чтобы к моменты выполнения конструктора все филды уже были инициализированы ? А нафиг тогда конструктор? :) А еще есть @PostConstruct я думал такое только в спринге есть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 18:50 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
questionerа самое тривиальное я так понимаю сделать ссылки на все поля этого объекта volatile?volatile поля внутри объекта не помогут. А вот если вы сделаете ссылку, которой присваиваете вновь созданный объект volatile, то тогда опубликуете его безопасно, даже без final полей внутри класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 20:42 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach, и публиковать уже только тогда, когда объект полностью сконструирован? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 21:43 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
redwhite90и публиковать уже только тогда, когда объект полностью сконструирован?Не совсем понял ваш вопрос. Поясните, пожалуйста. volatile-запись гарантирует, что все операции, следовавшие в коде до нее будут видны к тому моменту, как станет видна эта запись. То есть, если у нас есть класс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. И где-то есть вот такая декларация: Код: java 1. То вот такая публикация всегда будет безопасной: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2014, 22:11 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach, DEVcoachНе совсем понял ваш вопрос. Поясните, пожалуйста. я имел ввиду такую ситуацию. Код: java 1. 2. 3. 4. 5. 6. 7. 8. DEVcoachТо вот такая публикация всегда будет безопасной: Код: java 1. никак до конца воткнуть не могу. конкретно тут фраза DEVcoachТо вот такая публикация всегда будет безопасной значит что a.field1 и a.field2 гарантированно выдадут 1 и 2. неужели может быть иначе? контр-пример был бы показателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 00:01 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
redwhite90 , Да, без volatile и без final они могут быть 0. Показать пример такого кода сложно, так как это надо, что бы JIT зареордерил эти инструкции. Когда он это делает - хз. За ответом надо идти к Шипилеву/Куксенко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 07:12 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach redwhite90 , Да, без volatile и без final они могут быть 0. Показать пример такого кода сложно, так как это надо, что бы JIT зареордерил эти инструкции. Когда он это делает - хз. За ответом надо идти к Шипилеву/Куксенко. DEVcoach , Вы запутались, понятно про volatile поля обьекта и приводили примеры, а здесь у вас volatile A a, и тогда причем реордер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 09:09 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
0FDDEVcoach , Вы запутались, понятно про volatile поля обьекта и приводили примеры, а здесь у вас volatile A a, и тогда причем реордер.Вопрос звучал так: redwhite90значит что a.field1 и a.field2 гарантированно выдадут 1 и 2. неужели может быть иначе? контр-пример был бы показателен.Ответ приведен выше: да, может, если объект публикуется на в volatile ссылку, и если его поля не final. В чем я запутался? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 09:38 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoachОтвет приведен выше: да, может, если объект публикуется на в volatile ссылку, и если его поля не final. В чем я запутался? :-) Выходит что не-volatile ссылка инициализируется до конструирования обьекта? выделили памать, а дальше, где-то, вызов конструктора, выходит даже в том же потоке есть вероятность получить несконструированный обьект из-за реордера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 09:58 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
0FD , В том же потоке нельзя, так как есть happens-before между всеми соседними операциями. А с другого потока можно увидеть не до конца сконструированный объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 10:14 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach 0FD , В том же потоке нельзя, так как есть happens-before между всеми соседними операциями. А с другого потока можно увидеть не до конца сконструированный объект. Выходит, что ссылка инициализируется только после вызова конструктора в потоке, а как же тогда другой поток увидет ссылку, которая инициализирована до вызова конструктора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 10:23 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach, А не, ссылка на обьект, до вызова конструктора, это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 10:45 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
0FD , Ну это мы возвращаемся к основам JMM и архитектуре современных компьютеров :-) Поток может легко переставить инициализацию ссылки адресом созданного объекта до инициализации всех его полей - это не поломает логику кода в этом потоке. Но если другие потоки увидят эти операции в другом порядке, то это может их "озадачить". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 10:53 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
DEVcoach 0FD , Поток может легко переставить инициализацию ссылки адресом созданного объекта до инициализации всех его полей. тут явно с падежами что-то не то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 11:04 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Да просто тут как 1 2 3. a) отводится память; b) запускается конструктор для указателя на эту память; d) указатель на память присваивается переменной; e) читается объект по адресу в переменной. Оптимизатор JVM (и иногда процессор) полагают, что - b должно быть после a - d должно быть после a - e должно быть после b - e должно быть после d Выделенное курсивом (как впрочем и все остальное) рассматривается только в том же потоке, что и a . На взаимный порядок выполнения b и d ограничений нет. Для других потоков с инчтрукцией e a,b,d - не существуют. Однако если вставить операцию c) захват блокировки, работа с volatile и т.п; то появятся отношения - с должно быть после b - d должно быть после c и оптимизатор не сможет переставлаять уже b и d в первом потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:42 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Сложность возникает с публикацией из конструктора. В конструкторе (если он не default и private) при создании потомка, нет момента когда инициализация закончена, и опубликование безопасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:46 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
Я конечно против такого подхода, но Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И что-то я не понял - куда ни глянешь, все паттерны обсуждают, а тут почему-то забыли зачем нужны фабричные методы и пр. Впрчем я видел код, где из конструктора вообще вся обработка вызывается, включая несколько коннектов к разным БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:26 |
|
||
|
Вопрос на засыпку: это безопасная публикация или нет?
|
|||
|---|---|---|---|
|
#18+
schwa buldozer01Нет это не безопасная публикация - не обеспечено точечное freeze happens before Зачем нужен фриз, если есть старт потока, который создает hb по JMM? hb не транзитивен с freeze hb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38628260&tid=2127225]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 538ms |

| 0 / 0 |
