Java并发理论简介
这些文字来自于Java程序员修炼之道,记录一下
一、 java线程模型
Java线程模型建立在两个基本概念之上
- 共享的,默认可见的可变状态
- 抢占式线程调度
我们从侧面思考一下这两个概念
- 所有线程可以很容易地功效统一进程中的对象
- 能够引用这些对象的任何线程都可以修改这些对象
- 线程调度程序差不多任何时候都能在核心上调入或调出线程
- 必须能调出运行时的方法,否则无限循环方法会一直占用CPU
- 为了保护脆弱的数据,对象可以被锁住
二、设计理念
- 安全性(并发类型安全性)
- 活跃性
- 性能
- 重用性
1、安全性与并发类型安全性
安全性是指不管同时发生多少操作都能确保对象保持自相一致。如果一个对象系统具备这一特性,那它就是并发类型安全的。
保证安全:
保证安全的策略之一就是处于非一致状态时绝不能从非私有方法中返回,也绝不能调用任何非私有方法,而且也绝不能调用其他任何对象中的方法。如果把这个策略跟某种对非一致对象的保护方法(比如同步锁或临界区)结合起来,就可以保证系统是安全的(不大理解)
2、活跃度
在一个活跃的系统中,所有做出尝试的活动最终或者取得进展,或者失败
三、原则互相冲突
设计原则经常相互对立
- 安全性与活跃性相互对立---安全性确保坏事不会发生,活跃度要求见到进展
- 可重用性的系统倾向于对外开放其内核,可这会引发安全问题
- 一旦安全但编写方式幼稚的系统性能通常都不会太好,因为里面会用大量的锁来保证安全性
最终应该尽量让代码达到一种平衡状态
- 尽可能限制子系统之间的通信。隐藏数据对安全性非常有帮助
- 尽可能保证子系统内部结构的确定性。比如说,即便子系统会以并发的、非确定性的方式进行交互,子系统内部的设计也应该参照线程和对象的静态知识
- 采用客户端应用必须遵守的策略方针
- 在文档中记录所要求的行为