什么是不变模式?
不变模式天⽣就是多线程友好的,它的核心思想是,⼀个对象⼀旦被创建,它的内部状态将永远不会发生改变。没有⼀个线程可以修改其内部状态和数据,同时其内部状态也绝不会⾃⾏发⽣改变。基于这些特性,对不变对象的多线程操作不需要进行同步控制。
不变模式的使用场景要满足两个条件:
- 对象创建之后,其内部状态和数据不再发生任何改变
- 对象需要被共享,被多线程访问
不变模式通过回避问题⽽不是解决问题的态度来处理多线程并发访问控制,不变对象是不需要进⾏同步操作的。
由于并发同步会对性能产生不良的影响,因此,在需求允许的情况 下,不变模式可以提⾼系统的并发性能和并发量。
如何实现不变模式
在Java中实现不变模式很简单,只需要保证四点:
- 去除所有的
setter以及修改自身属性的方法 - 属性都是
private final修饰 - 类使用
final修饰,防止子类重载 - 有一个能够构造完整对象的构造函数
Java中的String就是一个很典型的不变模式。