nealmind's Blog

Immutable对象满足条件

2020-03-10
neal

Immutable对象满足条件

  • 对象创建后,其状态就不能修改
  • 对象的所有域都是final修饰
  • 对象是正确创建的(即在创建过程中没有出现this溢出)

Immutable对象是线程安全的,因为其状态不可变,并且只有构造函数控制;

如何安全的发布一个对象

要安全的发布一个对象,需要同时保证对象的引用和对象的状态对其他线程可见, 可以通过以下方式安全的发布:

  • 在静态初始化函数中初始化一个对象的引用(保证只初始化一次)
  • 将对象的引用由volatile修饰,或者保存到AtomicReference对象中
  • 将对象的引用保存到某个正确构造对象的final类型域中
  • 将对象的引用保存到由锁保护的域中(例如线程安全的集合工具类)

引用:《Java并发编程实战》


***************************************************************

基于个人学习总结,如有错误,请留言告知,谢谢.


Content