powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java concurrency and multithreading
25 сообщений из 102, страница 4 из 5
java concurrency and multithreading
    #39320358
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения.

Ну Singleton тоже на volatile не реализовать )))
А при добавлении synchronized volatile уже и не нужен.

AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320366
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется волатайл подходит тогда, когда нам не важно идёт ли запись одновременно с чтением, или нет. Ну пропустим мы значение, которое ещё по кешам не растеклось, а только ещё растекается. Однако не потратимся на дорогую синхронизацию, и получим нормальное целостное значение переменной.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320371
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoСамое последнее изменение в перменчивой переменной :)

авторit also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change.

Я читаю, как "это так же означает, что поток читающий volatile переменную увидит не только последнее [видимое] изменение, но и все побочные эффекты, которые выполнил изменяющий код, перед изменением" в то время, как Вы читаете это, как "это так же означает, что поток читающий volatile переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320375
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLoСамое последнее изменение в перменчивой переменной :)

авторit also means that when a thread reads a volatile variable, it sees not just the latest change to the volatile, but also the side effects of the code that led up the change.

Я читаю, как "это так же означает, что поток читающий volatile переменную увидит не только последнее [видимое] изменение, но и все побочные эффекты, которые выполнил изменяющий код, перед изменением" в то время, как Вы читаете это, как "это так же означает, что поток читающий volatile переменную обязательное увидит самое последнее изменение этой переменной, а так же ... ".
Ну правильно, так как [видимое] это чисто ваши фантазии.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320377
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторthe latest
Значит "самое последнее", а не "последнее видимое".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320392
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirЗачем нужен volatile - здесь просто, допустим у вас есть singleton глобальная static переменная, но которая не volatile, дак вот в этой ситуации у вас нет никакой гарантии, что разные потоки работающие с этой переменной будут видеть действия друг друга, у каждого потока может существовать свой лунапарк с блекджеком и мир, со своей переменной и он будет видеть только свои изменения.

Ну Singleton тоже на volatile не реализовать )))
А при добавлении synchronized volatile уже и не нужен.
AFAIK
При добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320399
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevXDiaBLoТак я вот как раз говорил о том, что такое впечатление что запись в волатайл переменную приводит к обновлению не только самой этой волатайл переменной, но и того что менялось до неё. И интересуюсь правильное ли это предположение?
Да. Хотя это я плохо понимаю ))). Запись в volatile переменную приводит к срабатыванию барьера.

Как раз надо уйти от термина "срабатывание" и т.п.
Надо просто понять, что JMM это список обязательств . Нам не надо знать, как это будет реализовано.
Просто если мы прочитали волатайл, то мы видим все изменения, сделанные до записи этого волатайл в другом потоке.
Как это сделано на конкретной платформе знать не надо. Надо прост ознать, что это не бесплатно.

Leonid KudryavtsevБолее "странно" на мой взгляд, что в конструкторе final поля тоже являются барьером.

Не барьером. Надо понимать, что после выхода из конструктора все, кто получил (после выхода!) ссылку на этот объект- прочитают нужные значения final. Опять же - не надо понять, как это сделано. Надо понимать, что, во-первых, "утечка" this приведёт к разрушению этого счастья, а во-вторых это стоит мало (в отличии от волатайл).

PS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться?
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320405
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320410
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".

Мне кажется, что понимание этого (нет самого последнего) - самое сложно в JMM. Причём когда поймёшь- просто же всё.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320415
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominPS: а кто-нибудь на jocker едет? Есть желающие развиртуализироваться?
Летом все откладывал покупку билета, а сейчас жаба душит покупать за текущую цену...(
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320433
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
Можно ссылку на статьи. И про кошерность.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320451
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно.

Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state;
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320461
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevjust_vladimirПри добавлении synchronized все равно для кошерной реализации нужен volatile, тут не знаю даже, что сказать, на хабре штук 5 статей это обсасывает.
Можно ссылку на статьи. И про кошерность.
Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320469
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirLeonid Kudryavtsevпропущено...

Можно ссылку на статьи. И про кошерность.
Начать отсюда https://habrahabr.ru/post/248041/, а дальше по ссылкам из начала статьи
Хотя наверное признаю, что не совсем прав, в том смысле, что в принципе с synchronized мы можем получить корректную реализацию и в этом Вы несомненно правы, но она будет не эффективной, а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile.

Собственно согласен вот с этим постом:
scfда что тут обсуждать? синхронизированная переменная может заменить volatile, обратное неверно.
Вот только volatile дешевле, т.к. не требует захвата блокировки. Самое популярное применение - private volatile ImmutableState state;
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320505
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoПро волатайл я с трудом но вроде понял. Добавляет атомичности чтению записи в лонг и дабл, плюс отменяет кеширование переменнойvolatile не отменяет кэширование, volatile отменяет некоторые оптимизации, которые иначе могли бы быть сделаны.
Фактически, volatile это объявление: "значение переменной неподконтрольно текущему потоку".
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320533
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir.... а вот если мы захотим ее реализовать эффективно (=кошерно), то помимо synchronized нам потребуется volatile.
Ну а дальше до кучу статей на хабре, где народ пишет, что DCL не факт, что эффективнее просто synchronized ))) А в некоторых случаях, у людей вроде даже получалось дороже.

Т.ч. ссылка на статью как раз очень хороша. Кто-то сказал, что DCL в Singleton правильно - все не думая ломанулись так делать (паттерн! мать его ))) ). В результате, куча ошибок и непонятно какой выигрыш/проигрыш по performance.

Мое IMHO:

Leonid KudryavtsevЛично мне, ключевого слова synchronized _пока_ вполне хватает. Все равно тормозит совсем в других местах )))

Если приложение может обработать от 500 до 2000 клиентских запросов в минуту, вряд ли, разница в скорости между synchronized коллекциями, ConcurrentLinkedQueue и/или single producer - single consumer queue будет заметна пользователям. IMHO & AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320535
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf....Самое популярное применение - private volatile ImmutableState state;
А что это такое?
можно ссылку, где об это почитать
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320537
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

java.util.concurrent.ConcurrentLinkedQueue - обратите внимание на кол-во volatile полей в этом классе.
В целом есть суровый труд the art of multiprocessor programming, который разбирает вопросы синхронизации с нуля и до вещей, которых даже на собеседованиях не спрашивают.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320538
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше я посмотрю, что нибудь более простое )))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320542
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320545
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))

вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320549
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfLeonid KudryavtsevА "количество" это не достоинство, а недостаток. Да и по производительности ConcurrentLinkedQueue явно не лидер для многих задач )))

вот это, простите, жесть. обозвать wait-free concurrent queue неэффективным... ну поищите попроще.
Я не говорил, что неэффективный. Я сказал, что есть более простые и эффективные для ряда применений.

Как раз эффективность и определяется тем, что в них намного меньше volatile и Atomic'ов

https://github.com/JCTools
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320554
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализация Circular Queue / RingBuffer значительно проще/эффективнее LinkedQueue.

В некоторых случаях, еще и функциональней. Например если нам нужен fixed размер queue и нужно отслеживать возможное превышение размера. Проверка по ConcurrentLinkedQueue.size, понятное дело, вообще ни в какие ворота не лезет.

IMHO & AFAIK
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39320662
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirXDiaBLo,
да, господи, считайте, как Вам угодно, в JMM нет понятия времени и то, что Вы верите в то, что оно там существует оно там не появится, а как следствие, если времени в JMM не существует, то и не существует понятия "самое последнее".
Да я давно понял что вы имеете в виду. Я думал мы спорим по поводу перевода этой фразы с английского. А Вы между строк читаете. Так вот в документации следует писать точнее, без всяких "между строк". Думаю это недостаток той документации.
...
Рейтинг: 0 / 0
java concurrency and multithreading
    #39321281
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНафига нужны volatile и как ими корректно пользоваться, мне не очень понятно, Atomic мне кажется более логичным и понятным классом (хотя визуально объявлены через volatile).
Так тут все просто. volatile более примитивен и дешевле, чем Atomic.

Volatile простой способ устанавить hb барьер. Атомик добавляет и прочие плюшки (проверку перед записью, инкремент и пр.). Дальше больше и дороже.
...
Рейтинг: 0 / 0
25 сообщений из 102, страница 4 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / java concurrency and multithreading
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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