Java并发编程(十二)线程安全性的委托
2024-08-29 07:19:32
在组合对象中如果每个组件都已经是线程安全的,是否需要再加一个额外的“线程安全层“,需要视情况而定。
final可以修饰未复制的属性,只要在静态代码块或者构造函数中赋值了即可。
独立的状态变量
我们还可以将线程的安全性委托给多个状态变量,只要这些变量是彼此独立的,即组合而成的类并不会在其包含的多个状态变量上增加任何不变性条件。
如果是状态变量之间存在着某些不变性条件时就没这么简单了。比如一个类中有两个属性,要满足的条件是一个属性的值要小于另一个属性的值。这是比较典型的先检查后执行的操作,如果没有足够的加锁机制来保证操作的原子性,这种委托不足以实现线程的安全性。在这种情况下,每个类必须提供自己的加锁机制以保证这些复合操作都是原子操作。
仅当一个变量参与到包含其他状态变量的不变性条件时,才可以声明为volatile。
比如要返回一个点的坐标,需要获取坐标x的值,以及坐标y的值,这样的话可能导致看到不一样的值:这个点从来都没有出现这个坐标上。
最新文章
- angularjs学习总结 详细教程(转载)
- url中参数以及callback后面的串
- 仓鼠找sugar(洛谷 3398)
- UEFI双硬盘安装win8.1和Ubuntu14.04
- Perl 内部结构详解
- NSS_08 extjs表单验证
- UVA 11354 Bond(最小瓶颈路+倍增)
- 熬之滴水成石:Spring--精简的J2EE(7)
- launchMode传递参数注意startActivityForResult
- Intent的概念及应用(一)
- python 中文编码
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
- oracle根据身份证号码 计算年龄、性别
- JWT认证
- 小程序布局中class='container'的bug
- php webservice实例(转载)
- JS中如何处理多个ajax并发请求?
- 20155222卢梓杰 《Java程序设计》第1周学习总结
- 【前端学习笔记04】JavaScript数据通信Ajax方法封装
- 一种基于匹配回朔的 css3 选择器引擎实现