要保持状态的一致性, 就需要在单个原子操作中更新所有相关的状态变量。
同步代码块包括两部分:一个作为锁的对象引用, 一个作为由这个锁保护的代码块。
以synchronized来修饰的方法就是一种横跨整个方法体的同步代码块, 其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。
重入的一种实现方法是, 为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。
虽然synchronized方法可以确保单个操作的原子性,但如果要把多个操作合并为一个复合操作,还是需要额外的加锁机制。
通常,在简单性与性能之间存在着相互制约因素。当实现某个同步策略时,一定不要盲目地为了性能而牺牲简单性(这可能会破坏安全性)。