Size: a a a

2020 September 11

GV

Gukov Viktor in learn.java
Danylo ᅠ
Пошёл ты с батей в разные магазины купить хлеб. Если ты купишь, то он не должен этого делать, и наоборот - нужен один хлеп. Перед тем как зайти в магазин вы решили созвониться - оба сказали, что не купили. Закэшировали isBought = false. Батя зашёл, вызвал купитьХлебЕслиНикемНеКуплен - батя купил хлеб, ведь isBought==false, стал true.
Теперь зашёл ты, вызвал купитьХле.. и чтобы не проверять и не тратить время на созвон делаешь оптимизацию взяв старое значение(звонил же батя, сказал, что не купил) с локального для тебя(ты - тред) кеша. Думаешь, батя не купил хлеб, ты берёшь. А на самом деле нужно было позвонить. Ты этого не сделал, хлеб у двух.
Прослезился
источник

Д

Дима in learn.java
Ну технически
источник

Д

Дима in learn.java
Это только от перестановок инструкций
источник

Д

Дима in learn.java
Волейтл
источник

NS

Name Schiefer in learn.java
Дима
Это только от перестановок инструкций
источник

Д

Дима in learn.java
Добавил стикпак
источник

SG

Sergey Grushin in learn.java
Danylo ᅠ
Пошёл ты с батей в разные магазины купить хлеб. Если ты купишь, то он не должен этого делать, и наоборот - нужен один хлеп. Перед тем как зайти в магазин вы решили созвониться - оба сказали, что не купили. Закэшировали isBought = false. Батя зашёл, вызвал купитьХлебЕслиНикемНеКуплен - батя купил хлеб, ведь isBought==false, стал true.
Теперь зашёл ты, вызвал купитьХле.. и чтобы не проверять и не тратить время на созвон делаешь оптимизацию взяв старое значение(звонил же батя, сказал, что не купил) с локального для тебя(ты - тред) кеша. Думаешь, батя не купил хлеб, ты берёшь. А на самом деле нужно было позвонить. Ты этого не сделал, хлеб у двух.
В мозгу что-то треснуло при чтении второго абзаца. И я ничего не понял из того, что произошло в конце.
Это был пример без использования volatile?
источник

V

Vlad in learn.java
Sergey Grushin
В мозгу что-то треснуло при чтении второго абзаца. И я ничего не понял из того, что произошло в конце.
Это был пример без использования volatile?
Да
источник

GV

Gukov Viktor in learn.java
Sergey Grushin
В мозгу что-то треснуло при чтении второго абзаца. И я ничего не понял из того, что произошло в конце.
Это был пример без использования volatile?
Вы с батей созвонились, и узнали, что хлеб ещё никто не купил. Когда приходишь в магазин, вспоминаешь, что хлеб никто не купил, значит надо купить. То же самое и у бати
источник

GV

Gukov Viktor in learn.java
В противном случае, батя тебе звонит и говорит "я хлеба купил, можешь не брать"
источник

SG

Sergey Grushin in learn.java
Gukov Viktor
Вы с батей созвонились, и узнали, что хлеб ещё никто не купил. Когда приходишь в магазин, вспоминаешь, что хлеб никто не купил, значит надо купить. То же самое и у бати
Ага! Т.е. без volatile переменная isBought становится для каждого треда личной?
источник

GV

Gukov Viktor in learn.java
Sergey Grushin
Ага! Т.е. без volatile переменная isBought становится для каждого треда личной?
Кэш у них свой, да
источник

SG

Sergey Grushin in learn.java
Gukov Viktor
Кэш у них свой, да
А с volatile - глобальной для всех тредов. Понял
источник

GV

Gukov Viktor in learn.java
Под каждый тред жаба свою область выделяет со стеком, емнип
источник

SG

Sergey Grushin in learn.java
Danylo ᅠ
Пошёл ты с батей в разные магазины купить хлеб. Если ты купишь, то он не должен этого делать, и наоборот - нужен один хлеп. Перед тем как зайти в магазин вы решили созвониться - оба сказали, что не купили. Закэшировали isBought = false. Батя зашёл, вызвал купитьХлебЕслиНикемНеКуплен - батя купил хлеб, ведь isBought==false, стал true.
Теперь зашёл ты, вызвал купитьХле.. и чтобы не проверять и не тратить время на созвон делаешь оптимизацию взяв старое значение(звонил же батя, сказал, что не купил) с локального для тебя(ты - тред) кеша. Думаешь, батя не купил хлеб, ты берёшь. А на самом деле нужно было позвонить. Ты этого не сделал, хлеб у двух.
Спасибо!
источник

GV

Gukov Viktor in learn.java
Sergey Grushin
А с volatile - глобальной для всех тредов. Понял
Ага, только есть одно большое но. Неатомарные операции над волатильными переменными не синхронизированы
источник

Д

Дима in learn.java
источник

GV

Gukov Viktor in learn.java
Sergey Grushin
Спасибо!
Я тебя сломал, да?
источник

Д

Дима in learn.java
За что ты так паренька
источник

Dᅠ

Danylo ᅠ in learn.java
Я сам чуть не сломался. А ожидается, что они синхронизируются сами по себе?
источник