《java并发编程实战》笔记(第4章)
来源:互联网 发布:第一源码网 编辑:程序博客网 时间:2024/05/22 08:26
(十九)设计线程安全的类
在设计线程安全类的过程中,需要包含以下三个基本要素:
1.找出构成对象状态的所有变量
2.找出约束状态变量的不变性条件
3.建立对象状态的并发访问管理策略。
19.1– 设计线程安全的类
1.类的不变性条件和后验条件约束了在对象上有哪些状态和状态转换是有效的。
2.某些方法还包含一些基于状态的先验条件(Precondition),称为依赖状态的操作。
(二十)实例封闭 Instance Confinement
实例封闭是构建线程安全类的一个最简单的方式,它使得在锁策略的选择上拥有了更多的灵活性。
对于其他形式的锁来说,只要自始至终都是用同一个锁,就可以保护状态。
封闭机制更易于构造线程安全的类,因为当封闭了类的状态时,在分析类的线程安全性时就无须检查整个程序。
@ThreadSafe
public class PersonSet {
private final Set myset = new HashSet();
public synchronized void add(E e){ myset.add(e); } public synchronized boolean contain(E e){ return myset.contains(e); }
}
PersonSet的状态由myset来管理 ,而HashSet不是线程安全的。但是由于myset是私有的并且不会逸出,因此hashset被封闭在PersonSet中。
唯一能访问myset的代码为 add和contain方法,在执行它们时候都要获得PersonSet上的锁,PersonSet的状态完全由它的内置锁保护。因此PersonSet
是一个线程安全的类。
(二十一)私有的锁对象好处
public class PrivateLock{
private final Object myLock = new Object();
Widget widget ;
void someMethod(){ synchronized(){ //访问或修改widget 的状态 } }
}
使用私有的锁对象而不是对象的内置锁,有许多优点:
私有的锁对象可以将锁封装起来,使客户代码无法得到锁,但是客户代码可以通过公有方法来访问锁,以便(正确或者不正确)参与到它的同步策略中。
此外,要想验证某个公有访问的锁在程序中是否被正确的使用,者需要检查整个程序,而不是单个的类。
- 《java并发编程实战》笔记(第4章)
- 《java并发编程实战》笔记(第3章)
- 《java并发编程实战》笔记(第6章)
- 《java并发编程实战》笔记(第7章)
- 《java并发编程实战》笔记(第8章)
- 《java并发编程实战》笔记(第9章)
- 《java并发编程实战》笔记(第10章)
- java并发编程实战第7章
- java并发编程实战第8章
- Java并发编程实战~笔记~章二
- Java并发编程实战~笔记~章三
- Java并发编程实战~笔记~章四
- Java并发编程实战~笔记~章五
- 《java并发编程实战》笔记(1)
- Java并发编程实战笔记(一)
- Java并发编程实战笔记(二)
- java并发编程实战(笔记)
- Java并发编程实战笔记(4)- 线程实现方式
- intellij idea Cannot start compilation: the output path is not specified for module
- Java实现-K数和
- BZOJ 1590: [Usaco2008 Dec]Secret Message 秘密信息 Trie树
- 快速上手写spark代码系列03:开始写一个spark小脚本(1)
- POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day
- 《java并发编程实战》笔记(第4章)
- MyBatis中jdbc和managed的区别
- 调用ThunderAgent 迅雷局域网版的开发
- find mtime的时间算法
- Java方法中 访问url 下载链接,下载文件
- shell实现进度条
- 【每天一点Linux】shell脚本学习之二——语法
- Android触屏事件和MotionEvent介绍
- 【长沙·签约】中企动力携手郴州市城市规划设计院布局一站式全网门户平台