两件事情:
首先,不可能对同一对象的两次同步方法调用进行交织。当一个线程正在执行对象的同步方法时,所有其他线程调用同一对象块的同步方法(挂起执行),直到第一个线程对该对象完成。
其次,当同步方法退出时,它会与随后对同一对象的同步方法的任何调用自动建立事前发生关系。这样可以保证对对象状态的更改对所有线程都是可见的。
同步方法提供了一种防止线程干扰和内存一致性错误的简单策略:如果一个对象对一个以上线程可见,则对该对象变量的所有读取或写入都将通过同步方法完成。(一个重要的例外:构造对象后,不能修改的final字段可以在构造对象后通过非同步方法安全地读取)。
来源:http
:
//docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html



