powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучение многопоточности в Java
7 сообщений из 32, страница 2 из 2
Изучение многопоточности в Java
    #39396813
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
Это не работает т.к. while(!flag) {} тупо не перечитывает из памяти (куда дб попасть т.к. final в конструкторе).
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396861
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКстати предлагаю разобрать, кто чувствует силы в себе, по полочкам пример кода:
...
Ожидаю, что сейчас посоветуют читать Concurrency in practise. Но для начала это слишком суровое чтиво.
Нет не посоветую. Вместо этого вот вам всем неуверенным в себе первое, что вы должны знать о многопоточности:

информация между потоками не передается через голые переменные, как реализовано в приведенном вами примере. Необходимо использовать связующий объект. В 90% подойдет любая реализация интерфейса BlockingQueue. Производитель вызывает метод put(), а потребитель - метод take().

В вашем примере, когда надо передать только одно значение, лучшим вариантом будет какая-либо реализация интерфейса Future, например CompletableFuture, так как дает возможность передать не только значение при удачном исходе, но и исключение при неудачном.

Второе: прочитайте бегло документацию, чтобы знать, какие связующие объекты уже реализованы.

Это почти все, что нужно знать рядовому программисту о многопоточности.

Третье: Concurrency in practiсe и все прочие книги, которые описывают, как использовать synchronized/wait/notify/ReentrantLock нужны только затем, чтобы реализовать специфический связующий объект в случае, если существующие реализации чем-то не устраивают. И прежде чем читать такие книги, лучшая учеба - читать исходники уже реализованных связующих объектов. Причем исходники java.util.concurrent - не лучший источник вдохновения: они вылизаны с точки зрения производительности, но авторы принесли в жертву понятность и убедительность.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39396990
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?
Если код будет сразу нативным. Не будет вызова GC, перелета потока с одного проца на другой и пр. неожиданных событий по сбросу кеша, то побудительных причин , для того, чтоб instance стал отличным от null в основном потоке, вроде бы и может не оказаться.
questionerНО, судя по всему, подразумевается, что условием видимости будет то, что чтение произошло после записи.
Оно самое, а в дополнение JMM требует от JVM, чтобы та обеспечила видимость и всего остального, что было до того, раз это действие видимо.

P.S. System.out.print хреновое средство для твоей задачи - оно само неявно ставит барьеры.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39397006
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Т.е. это по факту так, но в JMM не гарантируется, вывод - final поля видны после инициализации, а также видны все действия с final полями в конструкторе если строго по JMM и не залипать на текущее положение дел. Вроде все :).
Немного уточню, процитировав комент, на который ссылается Алексей
jdk // 1. The constructor wrote a final. The effects of all initializations
// must be committed to memory before any code after the constructor
// publishes the reference to the newly constructed object. Rather
// than wait for the publication, we simply block the writes here.
// Rather than put a barrier on only those writes which are required
// to complete, we force all writes to complete.

JMM требует создать барьер в момент когда инициализированы все final поля.
Поскольку разбивать конструктор сильно влом, да и чревато, авторы OpenJDK несколько ужесточают подход создают его по окончании конструктора в данном случае.
В принципе на других JVM (и в отдаленном будущем) это может быть и не так, но маловероятно ибо "А зачем?"
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39397017
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqВ 90% подойдет любая реализация интерфейса BlockingQueue. Производитель вызывает метод put(), а потребитель - метод take().
Хотелось бы посмотреть на реализацию Singletone через BlockingQueue, метод put() и метод take(). Начиная с безопасной публикации самого BlockingQueue таким образом, а не через голое final поле или еще как-нибудь так.
Да и выстраивание потоков в очередь это порой приводит к "многопоточности", которая медленнее одного потока.

P.S. Многопоточность IMHO следует начинать с осознания того, что она нужна только когда можно потоки развести между собой и как это делается. И почему обмен информацией между ними это всегда проблемка. А потом уж выбирать способ который эту проблемку решит.
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39397053
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевquestionerНу и кстати, господа, насчёт практики, кто нить может таки про код то пояснить?
Если код будет сразу нативным. Не будет вызова GC, перелета потока с одного проца на другой и пр. неожиданных событий по сбросу кеша, то побудительных причин , для того, чтоб instance стал отличным от null в основном потоке, вроде бы и может не оказаться. то есть точно вы не уверены?
...
Рейтинг: 0 / 0
Изучение многопоточности в Java
    #39397062
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Так речь то про то, что гарантий нет, как в одну, так и в другую сторону (может увидит изменение, а может и нет).

Ошибки в парралельной работе иногда выражаются в том, что код работает и на тестах и в жизни. А потом кто-то находит способ устроить гонку и списать деньги не со своего счета.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучение многопоточности в Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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