一、概念
带来『原子性』和『内存可见性』的根本原因
此前介绍了许多,与原子性和可见性,相关的问题
根本原因
一种解决思路
什么是『不可变对象』
为什么说,线程安全性是『不可变对象』的固有属性之一
不可变对象一定是线程安全的
为什么说,不可变对象很简单
为什么『不可变对象』相较于『可变对象』更加可信
定义不可变对象的两种方法
1、不可变对象内部,使用不可变对象来管理它们的状态(也即不可变对象嵌套,也即权威final)
2、不可变对象内部,使用可变对象来管理它们的状态,但是可变对象,不能对外发布
所有的域都声明为final类型,就是不可变性对象吗?
满足不可变对象的几个条件
对象创建以后,其状态就不能修改
对象的所有域,都是final类型
对象是正确创建的(在对象的创建期间,this引用没有逸出)
在不可变对象的内部仍可以使用可变对象来管理它们的状态,但需要满足一定的条件
1、代码
2、解释:不清楚为什么是这样
<span style="font-size: inherit;">3、条件</span><br>
二、Final
final的作用?
什么时候使用『不可变对象』
即使对象是可变的,final也可以『限制对象的可变性』
良好的编程习惯
1、『除非需要更高的可见性,否则应该将所有的域都声明为私有域』
2、『除非需要某个域是可变的,否则应该将其声明为final域』
三、使用Volatile类型发布【不可变对象】<br>
Volatile的定义
Volatile有什么特性?
使用Volatile的前提
Volatile可见性
Synchronized与volatile区别 <br>
四、定义不可变对象的两个方法
1、使用 final
2、不定义 setter方法
3、不定义 getter 或其它方法,返回状态的引用(如果状态是一个对象的情况下)