Описание тега happens-before

Happens-before относится к многопоточным приложениям, в которых логика возникла до того, как возникла последовательность логики потока.
3 ответа

Построенный nonFinalField и внутренняя Runnable/Thread видимость

Я предполагаю, что это связано с правилом "происходит раньше", но у меня нет конкретного объяснения... Мой вопрос заключается в том, гарантированно ли нить ссылку на "Hello World" потоком "поток"? И нет, я не хочу делать окончательный вариант nonFin…
21 окт '13 в 13:41
2 ответа

Бывает-раньше для прямого ByteBuffer

У меня есть прямой ByteBuffer (вне кучи) в одном потоке, и я могу безопасно опубликовать его в другом потоке, используя один из механизмов, предоставленных мне JMM. Распространяется ли отношение "происходит до" на собственную (вне кучи) память, обер…
01 ноя '17 в 08:38
2 ответа

Отношение "происходит до" в модели памяти Java

Что касается JLS ch17 Threads and Locks, в нем говорится: "если одно действие происходит до другого, то первое видно и упорядочено до второго"; Я думаю: (1) Что на самом деле означает сказать "заказано раньше"? Потому что даже если action_a произойд…
1 ответ

Java: насколько изменчива гарантия видимости "данных" в этом куске кода?

Class Future { private volatile boolean ready; private Object data; public Object get() { if(!ready) return null; return data; } public synchronized void setOnce(Object o) { if(ready) throw...; data = o; ready = true; } } В нем говорилось: "Если пот…
2 ответа

Поток ожидает навсегда для случая уведомления

Возможно ли в каких-то случаях получить "ожидание навсегда" в ThreadA. Я имею в виду, что уведомление выполняется быстрее, чем b.sync.wait(); class ThreadA { public static void main(String [] args) { ThreadB b = new ThreadB(); b.start(); synchronize…
26 сен '13 в 13:13
1 ответ

Согласованность памяти Java для рабочих потоков Executor

Согласно Javadoc, реализация Executor должен соответствовать: Эффекты согласованности памяти: Действия в потоке (A) перед отправкой объекта Runnable исполнителю выполняются до начала его выполнения, возможно, в другом потоке (B). Pheraps из-за моего…
4 ответа

Способствует ли порядок изменения отношениям "произойдет до"?

// Thread 1 // do A x.store(1, std::memory_order_release); // operation1 // Thread 2 // do B x.store(2, std::memory_order_release); // operation2 // Thread 3 x.load(std::memory_order_acquire); // operation3 Я понял, что если поток 3 читает значение,…
21 фев '19 в 12:43
3 ответа

Java синхронизируется и происходит раньше

Синхронизированный оператор устанавливает отношение "происходит до". Но я не уверен в деталях. В http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html можно прочитать Разблокировка (синхронизированный блок или выход мето…
3 ответа

Параллельная коллекция происходит до отношений

Сейчас я изучаю параллелизм, и я попытался написать программу, которая должна демонстрировать отношения "до и при использовании" при одновременном сборе. Как указано в пакете java.concurrent: Методы всех классов в java.util.concurrent и его подпакет…
3 ответа

Применяется ли в Java новая модель памяти также и к члену объекта, который объявлен как volatile?

В новой модели памяти Java любая запись в переменную гарантированно будет завершена до того, как следующий поток прочитает ее. Интересно, это также относится и к переменным, которые являются членами этого объекта. для модели памяти Java: http://www.…
2 ответа

Есть ли у меня проблема с переупорядочением, и это связано с побегом ссылки?

У меня есть этот класс, где я кеширую экземпляры и клонирую их (данные изменяемы), когда я их использую. Интересно, могу ли я столкнуться с проблемой переупорядочения с этим. Я посмотрел на этот ответ и JLS, но я все еще не уверен. public class Data…
1 ответ

Будет ли законным для компилятора Java пропускать коды операций getfield после первого доступа?

Я экспериментировал с портом Java некоторого кода C#, и я был удивлен, увидев, что javac 1.8.0_60 испускает getfield код операции каждый раз, когда к объектному полю обращались. Вот код Java: public class BigInteger { private int[] bits; private int…
07 окт '15 в 15:48
1 ответ

В случае invokeLater() или invokeAndWait задано отношение "происходит до"?

Я уверен, что это так, но я хотел бы знать наверняка, есть ли отношение "происходит до" в случае invokeLater() или invokeAndWait()? Методы определены в (SwingUtilities соответственно) AWT.EventQueue. Я предполагаю, что происходит синхронизация, когд…
5 ответов

Java случается раньше и безопасность потоков

Предположим, у меня есть класс, который упаковывает HashMap следующим образом: public final class MyClass{ private final Map<String, String> map; //Called by Thread1 public MyClass( int size ){ this.map = new HashMap<String, String>( siz…
0 ответов

Java двойная проверка блокировки синглтона должна использовать ключевое слово volatile?

Привет, у меня есть проблема с двойной проверкой блокировки в шаблоне синглтона в следующем коде: private volatile static DoubleCheckSingleton instance; private DoubleCheckSingleton() {} public static DoubleCheckSingleton getInstance(){ if(instance=…
04 июл '18 в 16:26
2 ответа

"Частичное упорядочение" и "Бывает-до" отношение java

Я читаю следующую книгу Java-параллелизм на практике http://www.informit.com/store/java-concurrency-in-practice-9780321349606 Меня смущает конкретное объяснение относительно отношения "Бывает до". Утверждается, что операции упорядочены путем частичн…
01 окт '13 в 16:08
1 ответ

Многопоточность Java без отношения "до и после"

У меня есть две темы, использующие один и тот же Object obj и как я прочитал все изменения, сделанные в obj от Thread A будет виден для Thread B из-за случившегося до отношений. То, что я хочу сделать, это наоборот, изменение obj в Thread A не будуч…
06 сен '17 в 11:47
3 ответа

Модель памяти Java: изменчивые переменные и происходящие раньше

Я хотел бы уточнить, как происходит связь до того, как работают переменные. Пусть у нас есть следующие переменные: public static int i, iDst, vDst; public static volatile int v; и нить А: i = 1; v = 2; и нить B: vDst = v; iDst = i; Правильны ли след…
1 ответ

C++: может ли один поток видеть вновь выделенный объект как неинициализированный, если он проходит через очередь без блокировки lock?

Я создаю механизм с несколькими потребителями для одного производителя. Я хочу сделать что-то вроде этого, предположим, у меня есть доступ к экземпляру очереди без блокировки, доступной для обоих потоков и переменной условия синхронизации: Тема 1 (п…
1 ответ

Происходит раньше, т.е. hb(x,y) отличается от hb(y,x)?

Приемлемые ответы после просмотра ответов, комментариев и jls-17.4.2 1) антисимметричное свойство имеет вид, указанный пользователем - user3707125 2) отношение hb между блокировками фактически находится между разблокировкой и блокировкой hb(ul, l), …