12如何用面向对象思想写好并发程序
12如何用面向对象思想写好并发程序
- 封装共享变量
- 识别共享变量间的约束条件
- 制定并发访问策略
封装共享变量
将共享变量作为对象属性封装在内部
不变的量可用final修饰,避免并发问题
识别共享变量约束条件
比如数值型的上下限,上限不能小于下限
反映在代码里,基本上都会有if语句,此时注意竞态条件
制定并发访问策略
- 避免共享
利于线程本地存储以及为每个任务分配独立的线程 - 不变模式
Java领域应用的很少,但在其他领域却有着广泛的应用,例如 Actor模式、CSP模式以及函数式编程的基础都是不变模式 - 管程及其他同步工具
Java领域万能解决方案:管程,但是对于很多特定场景,使用 Java并发包提供的读写锁、并发容器等同步工具会更好
写出健壮并发程序的宏观原则
- 优先使用成熟的工具类
JavaSDK并发包里提供了丰富的工具类,自己造轮子要小心 - 小心使用低级的同步原语
synchronized、Lock、Semaphore等并不简单 - 避免过早优化
安全第一,并发程序首先要保证安全,出现性能瓶颈后再优化。在设计期和开发期,很多人经常会情不自禁地预估性能的瓶颈,并对此实施优化,但残酷的现实却是:性能瓶颈不是你想预估就能预估的。