第2章 线程安全性-加锁机制
2015-08-03 09:50
176 查看
要保持状态的一致性, 就需要在单个原子操作中更新所有相关的状态变量。
同步代码块包括两部分:一个作为锁的对象引用, 一个作为由这个锁保护的代码块。
以synchronized来修饰的方法就是一种横跨整个方法体的同步代码块, 其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。
重入的一种实现方法是, 为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。
虽然synchronized方法可以确保单个操作的原子性,但如果要把多个操作合并为一个复合操作,还是需要额外的加锁机制。
通常,在简单性与性能之间存在着相互制约因素。当实现某个同步策略时,一定不要盲目地为了性能而牺牲简单性(这可能会破坏安全性)。
同步代码块包括两部分:一个作为锁的对象引用, 一个作为由这个锁保护的代码块。
以synchronized来修饰的方法就是一种横跨整个方法体的同步代码块, 其中该同步代码块的锁就是方法调用所在的对象。静态的synchronized方法以Class对象作为锁。
重入的一种实现方法是, 为每个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。
虽然synchronized方法可以确保单个操作的原子性,但如果要把多个操作合并为一个复合操作,还是需要额外的加锁机制。
通常,在简单性与性能之间存在着相互制约因素。当实现某个同步策略时,一定不要盲目地为了性能而牺牲简单性(这可能会破坏安全性)。
相关文章推荐
- stm32学习资料
- 南邮 OJ 1004 线性表操作
- HODJ3555 Bomb【数位dp】
- windows API获取物理内存大于4G的方法
- 南邮 OJ 1003 斐波那契数列
- Windows 下安裝 OpenCC
- 日经春秋 20150803
- HDU 1796 容斥原理
- rouser 移动脚本
- 服务器的响应数据的类型
- Mahout推荐算法API详解(实用)
- getaddrinfo函数使用
- 天声人語 20150803
- 二叉树遍历之(中序+先序,中序+后序)
- 协定类型不具有 ServiceContractAttribute 特性
- hadoop深入了解(一)
- HDU 2602 Bone Collector(01背包)
- 枚举的简单使用
- Bestcoders 回文串 Manacher 算法
- 《微软云计算Microsoft Azure部署与管理指南》即将上市!!!