1.不可变对象。创建后状态不能被修改的东西。
2.法则:不可变对象天生就是线程安全的。
3.不可变对象:
只有满足如下状态,一个对象才是不可变的:
A它的状态不能在创建后再修改;
b 所有域都是final类型的;并且,
c 它被正确创建(创建期间没有发生this引用的逸出)
注意:final修饰的引用(的对象)时,指的是对象不可变(尽管final域指向的对象是可变的,这个对象仍然可以修改),并不是到对象的引用不可变。详见java编程思想中的final关键字。
注意:final域使得确保初始化安全性成为可能,初始化安全性让不可变对象不需要同步就能自由地被访问和共享。
4.良好实践:将所有的域声明为final型,除非它们是可变的。
5.使用volatile发布不可变对象。
法则:不可变的容器对象持有与不可变约束相关的多个状态变量,并利用volatile引用确保及时的可见性。