powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / happens before
25 сообщений из 28, страница 1 из 2
happens before
    #38826168
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Хочу разобраться в том как работает happens before

Читаю статью:

http://habrahabr.ru/post/133981/

но уже в самом начале:

авторpublic class Keeper {
private Data data = null;

public Data getData() {
if(data == null) {
synchronized(this) {
if(data == null) {
data = new Data();
}
}
}

return data;
}
}

не понимаю чем плох этот код, как его можно запустить и проверить, что он плохо работает.

Или как то по-другому стоит понять как работает happens before? Почитать, реализовать что то?

Спасибо.
...
Рейтинг: 0 / 0
happens before
    #38826201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusХочу разобраться в том как работает happens before

Не заморачивайся. Правда. Рано ещё.
Нужно понять одну вещь. Java Memory Model это сложный инструмент доказательства возможных и не возможних исходов некого кода в многопоточном исполнении.
Это не то что "работает". Это некоторая "гарантия", которую выдают JVM для определенного кода.

mr_virtusне понимаю чем плох этот код, как его можно запустить и проверить, что он плохо работает.

Вот и я говорю рано ещё. Отложи на время.
Я уже вроде расписывал где-то на форуме. Но найти что-то не могу сходу.
Есть синглтон.
Он должен быть "ленивым" - создавать instance только когда попросят, но не раньше.
Он должен быть потокобезопасным - instance создаётся только 1 раз, даже если первый вызов выполняет сразу несколько потоков.
Созданый instance должен после инициализации возвращаться максимально быстро без блокировок потоков. Что и конфликтует с предыдущим требованием.

mr_virtusИли как то по-другому стоит понять как работает happens before? Почитать, реализовать что то?

Много-много читать про JMM.
Например вот тут много толково и подробно разжевано:
http://cheremin.blogspot.com/
...
Рейтинг: 0 / 0
happens before
    #38826292
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо Вам большое! Как всегда дельные рекомендации.
...
Рейтинг: 0 / 0
happens before
    #38826546
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://cheremin.blogspot.com/ блок интересный, но я не смог там найти объяснение happens before.

А мне нужно для работы быстро разобраться. Хотя бы базовую концепцию понимать.
Может кто объяснит, пожалуйста, либо статью понятную подкинет.

Спасибо.
...
Рейтинг: 0 / 0
happens before
    #38826553
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusА мне нужно для работы быстро разобраться. Хотя бы базовую концепцию понимать.
Может кто объяснит, пожалуйста, либо статью понятную подкинет.

Откуда такая уверенность, что прямо "нужно для работы"
Happens before это отношение частично порядка. Оно используется для того чтобы описать, что если операция А произойдёт до операции B, то операция B гарантировано увидит изменения сделанные первой операцией.

Ну, попробуй в спеке прочитать

https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html Two actions can be ordered by a happens-before relationship. If one action happens-before another, then the first is visible to and ordered before the second.

If we have two actions x and y, we write hb(x, y) to indicate that x happens-before y.

If x and y are actions of the same thread and x comes before y in program order, then hb(x, y).

There is a happens-before edge from the end of a constructor of an object to the start of a finalizer (§12.6) for that object.

If an action x synchronizes-with a following action y, then we also have hb(x, y).

If hb(x, y) and hb(y, z), then hb(x, z).



ИМХО, вполне просто написано.

а потом по той же спеке разобраться в примерах где это используется
...
Рейтинг: 0 / 0
happens before
    #38826585
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusА мне нужно для работы быстро разобраться. Хотя бы базовую концепцию понимать.Базовая концепция: на разделяемых (видимых разным потокам) мутабельных переменных всегда ставить модификатор volatile .
...
Рейтинг: 0 / 0
happens before
    #38826591
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For AllБазовая концепция: на разделяемых (видимых разным потокам) мутабельных переменных всегда ставить модификатор volatile .
А лучше final ;)
...
Рейтинг: 0 / 0
happens before
    #38826595
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For All,
если не поставить, то что случится?
...
Рейтинг: 0 / 0
happens before
    #38826596
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо. стало понятней. доку почитаю.
...
Рейтинг: 0 / 0
happens before
    #38826599
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

авторОткуда такая уверенность, что прямо "нужно для работы"

Спросили про это. А я затруднился с ответом. Говорят - что это базовые вещи в многопоточном программировании. Знать обязательно и пригодится в будущем.
...
Рейтинг: 0 / 0
happens before
    #38826601
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вам написали:BlazkowiczHappens before это отношение частично порядка. Оно используется для того чтобы описать, что если операция А произойдёт до операции B, то операция B гарантировано увидит изменения сделанные первой операцией.Так вот, если volatile на мутабельных переменных (типа private Data data из примера про синглтон) не ставить, то нет гарантии, что:Blazkowiczоперация B гарантировано увидит изменения сделанные первой операцией.
...
Рейтинг: 0 / 0
happens before
    #38826605
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For All,

ок, спасибо большое. представление появилось.
...
Рейтинг: 0 / 0
happens before
    #38826668
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For All,

а использовать synchronize вместо volatile нельза из-за то, что при synchronize может возникнуть блокировка? или есть другие причины?
...
Рейтинг: 0 / 0
happens before
    #38826733
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разобрался с volatile. разные вещи с синхронайз они делают. синхронайз блокирует объект. а волотайл заставляет поток считывать каждый раз требуемые данные.
...
Рейтинг: 0 / 0
happens before
    #38826741
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

по JMM можно ещё вот кглянуть
YouTube Video
...
Рейтинг: 0 / 0
happens before
    #38826746
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiver, спасибо.
...
Рейтинг: 0 / 0
happens before
    #38827132
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusСпросили про это. А я затруднился с ответом. Говорят - что это базовые вещи в многопоточном программировании. Знать обязательно и пригодится в будущем.
Те кто так говорят имеют завышеное ЧСВ. Блокировки, взаимоблокировки, синхронизация - это базовые вещи. happens before и JMM это то что далеко не все понимают и могут использовать. HB вообще относится к теории множеств.
...
Рейтинг: 0 / 0
happens before
    #38827150
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczТе кто так говорят имеют завышеное ЧСВ. Блокировки, взаимоблокировки, синхронизация - это базовые вещи. happens before и JMM это то что далеко не все понимают и могут использовать. HB вообще относится к теории множеств.Не соглашусь. HB - это и есть следствие синхронизации данных между потоками. Если вы не понимаете HB, то вы не умеете писать многопоточный код, выходящий за рамки synchronized.
На средних позициях хватит и этого. Топовые позиции требуют понимания HB в обязательном порядке.
...
Рейтинг: 0 / 0
happens before
    #38827153
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_vitusГоворят - что это базовые вещи в многопоточном программировании
DEVcoachТоповые позиции требуют понимания HB в обязательном порядке.
Топовые, базовые, какая на.. ой. Разница?
...
Рейтинг: 0 / 0
happens before
    #38827355
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoachЕсли вы не понимаете HB, то вы не умеете писать многопоточный код, выходящий за рамки synchronizedИспользование java.util.concurrent - это такое тайное знание???
...
Рейтинг: 0 / 0
happens before
    #38827381
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovИспользование java.util.concurrent - это такое тайное знание???В документации к каждому второму классу в j.u.c упоминается happens-before.
...
Рейтинг: 0 / 0
happens before
    #38827387
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoachВ документации к каждому второму классу в j.u.c упоминается happens-before.Когда я выбирал класс для реализации пула подключений, то от документации мне потребовались одна вещь - уточнить имя класса ( ArrayBlockingQueue ).
Я, конечно, допускаю, что это один из половины классов, где happens-before не упоминается, но чем могло помочь сакральное знание для написания вполне тривиальной обёртки над готовой реализацией?
...
Рейтинг: 0 / 0
happens before
    #38827417
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovно чем могло помочь сакральное знание для написания вполне тривиальной обёртки над готовой реализацией ?Вы уже сами ответили на свой вопрос. Существуют нетривиальные задачи, и существуют задачи, когда никакой "готовой реализации" нет. Вот там эти знания и нужны.
...
Рейтинг: 0 / 0
happens before
    #38827454
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvСуществуют нетривиальные задачи, и существуют задачи, когда никакой "готовой реализации" нет. Вот там эти знания и нужны.Осталось понять, почему эти знания стали базовыми.
...
Рейтинг: 0 / 0
happens before
    #38827491
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovОсталось понять, почему эти знания стали базовыми.Потому что они являются базой для построения более высокоуровневых решений.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / happens before
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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