第2章 线程安全性-加锁机制

要保持状态的一致性, 就需要在单个原子操作中更新所有相关的状态变量。

同步代码块包括两部分:一个作为锁的对象引用, 一个作为由这个锁保护的代码块。

以synchronized来修饰的方法就是一种横跨整个方法体的同步代码块, 其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。

重入的一种实现方法是, 为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。

虽然synchronized方法可以确保单个操作的原子性,但如果要把多个操作合并为一个复合操作,还是需要额外的加锁机制。

通常,在简单性与性能之间存在着相互制约因素。当实现某个同步策略时,一定不要盲目地为了性能而牺牲简单性(这可能会破坏安全性)。

posted on 2015-08-03 09:50  a0000  阅读(141)  评论(0编辑  收藏  举报

导航