这在JLS的
Threads and Locks部分中描述.
当需要从主存储器读取线程时,根据同步顺序定义并在订单之前发生.基本上它表示为了使读取产生上次写入的值,写入需要在读取之前发生.
发生在之前的关系粗略地讲是根据锁定/解锁操作定义的(并且有一些例外)归结为同步方法和块的使用.除非您正在处理volatile变量,否则底线通常是您需要同步对共享数据的所有访问,最好是通过AtomicBoolean,BlockingQueue或其他一些java.util.concurrent类.
17.4.4 Synchronization Order
Every execution has a synchronization order. A synchronization order is a total order over all of the synchronization actions of an execution. For each thread t, the synchronization order of the synchronization actions (§17.4.2) in t is consistent with the program order (§17.4.3) of t.
Synchronization actions induce the synchronized-with relation on actions, defined as follows:
An unlock action on monitor m synchronizes-with all subsequent lock actions on m (where subsequent is defined according to the synchronization order).
A write to a volatile variable (§8.3.1.4) v synchronizes-with all subsequent reads of v b