并发编程 不可变模式
本文将介绍如何利用不可变模式解决并发问题,并运用享元模式减少内存占用。
一、不变模式解决并发问题
如果共享变量只能被读,不能被写,它的并发问题便不会存在。
因为无论何时、何地、何人访问,它的值都不会改变。
二、不可变类
在 Java 中,要创建一个不可变的类,做法是:
将所有成员变量声明为 final
声明为 final 的成员变量一旦初始化后便不可被改变,确保所有成员变量只能被赋值一次
不提供 SETTER
避免成员变量在类被实例化后赋值
让类本身也成为 final
防止类被继承
对类型为 “可变类” 的成员变量做特殊处理
- 不应在方法中改变成员变量的内容
- 不应对外提供成员变量的指针,可以提供深度拷贝以替代
三、不可变类 + 享元模式
1. 享元模式
享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。
其本质是一个对象池,当需要获取对象时,首先尝试从对象池中寻找, 如果没有才创建新对象,并将新对象放入对象池中。
2. 不可变类 + 享元模式
不可变类 + 享元模式,可以避免每次修改都创建一个新的不可变对象,造成内存的浪费。
3. Java 与不可变类 + 享元模式
Java 的 Long、Integer、Short、Byte 等基本类型的包装类都用到了不可变类 + 享元模式。
参考
- Java 并发编程实战