并发编程初探-对象的组合
2016-04-14 23:52
246 查看
对象的组合
一、设计线程安全的类
1.在设计线程安全类的过程中,需要包括以下三个基本要素:1)找出构成对象状态的所有变量
2)找出约束状态变量的不变性条件
3)建立对象状态的并发访问管理策略
2.收集同步需求
要确保类的线程安全性,就需要确保它的不变性条件不会再并发访问的情况下被破坏,这就需要对其状态进行推断。
对象与变量都有一个状态空间,即所有可能的取值,状态空间越小,就越容易判断线程的状态。
如果不了解对象的不变性条件和后验条件,那么久不能确保线程安全性。要满足在状态量的有效值或状态转换上的各种条件,就需要借助于原子性与封装性。
3.依赖状态的操作
如果在某个操作中包含基于状态的先验条件,那么这个操作就称为依赖状态的操作。
二、实例封闭
1.封装简化了线程安全类的实现过程,它提供了一种实例封闭机制,通常也简称为“封闭”。2.将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据是总能持有正确的锁。
3.封闭机制更易于构造线程安全类,因为当封闭类的状态变化时,在分析类的线程安全性时就无须检查整个程序。
4.Java监视器模式
从线程封闭原则及其逻辑推论可以得出Java监视器模式。遵循Java监视器模式的对象会把对象的所有可变状态都封装起来,并且由对象自己的内置锁来保护。
三、线程安全性的委托
如果一个状态变量时线程安全的,并且没有任何不变性条件来约束它的值,在变量的操作上也不存在任何允许的状态转换,那么久可以安全的发布这个变量。相关文章推荐
- springMVC实现REST开发详解(补充Json解析问题以及静态文件404错误解决办法)
- java 简易计算器Swing
- java--正则表达式——邮箱规范
- 20145240 《Java程序设计》第二次实验报告
- ASP.NET MVC之分部视图和ChildAction(三)
- Windows Server 2012 R2 设置 NTP 服务
- c++的this指针
- 对比springmvc与struts2
- springmvc最简单的配置
- 使用TWebBrowser时存在内存泄漏问题的解决方案(使用SetProcessWorkingSetSize函数,或者修改OleCtrls.pas源码解决问题)
- PHP6连接SQLServer2005的方法
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
- Java入门 第二季第二章 封装
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释
- 基于Sublime Text搭建Python IDE
- C++中负数的位操作
- java面向对象三大特征之多态
- C++中负数的位操作
- 浅析Java中的访问权限控制