Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / happens before / 25 сообщений из 28, страница 1 из 2
05.12.2014, 13:31
    #38826168
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
Привет!

Хочу разобраться в том как работает 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
05.12.2014, 13:46
    #38826201
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
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
05.12.2014, 14:45
    #38826292
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
Blazkowicz,

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

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

Спасибо.
...
Рейтинг: 0 / 0
05.12.2014, 17:58
    #38826553
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
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
05.12.2014, 18:38
    #38826585
For All
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
mr_virtusА мне нужно для работы быстро разобраться. Хотя бы базовую концепцию понимать.Базовая концепция: на разделяемых (видимых разным потокам) мутабельных переменных всегда ставить модификатор volatile .
...
Рейтинг: 0 / 0
05.12.2014, 18:44
    #38826591
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
For AllБазовая концепция: на разделяемых (видимых разным потокам) мутабельных переменных всегда ставить модификатор volatile .
А лучше final ;)
...
Рейтинг: 0 / 0
05.12.2014, 18:48
    #38826595
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
For All,
если не поставить, то что случится?
...
Рейтинг: 0 / 0
05.12.2014, 18:49
    #38826596
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
happens before
Blazkowicz,

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

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

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

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

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

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


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