提到不变性我首先想到的就是String这个类了。

之前学习了很多原子性以及可见性的问题:失效数据,丢失更新操作或者某个对象的状态不一致,都与多线程试图访问同一个可变的相关。

如果对象的状态不会发生改变,那么这些问题与复杂性也就自然消失了。

如果某个对象在被创建之后其状态就不能被改变,那么这个对象就称为不可变对象。

不可变对象一定是线程安全的。

不可变对象很简单,它们只有一种状态,并且该状态由构造函数来控制的。

1. 不可变对象的状态容易判断

2. 不可信的代码访问不可变对象不会改变其状态,防止留下引用在其他线程中修改

3. 不可变对象可以安全地共享和发布,而不需要保存副本

java语言规范并没有给出不可变性的正式定义,不可变性并不等同于给属性加上final修饰。

即使都用final修饰,带对象也不见得是不可变的,因为final类型的域中可以保存对可变对象的引用。

满足一下条件时,对象才是不可变的:

1. 对象一经创建便不可修改

2. 对象所有的域都是final类型

3. 对象是正确创建的(在创建的时候this没有逸出)

不可变对象只是外部不可以改变其状态,内部还是可以维护的。

在可变对象之上构建不可变对象。

String类型指向的字符串可以修改么?

final类型

volatile来发布不可变对象

最新文章

  1. C#~异步编程续~.net4.5主推的await&async应用(转)
  2. Swift 学习笔记 enum 枚举类型
  3. LeetCode Binary Tree Maximum Path Sum 二叉树最大路径和(DFS)
  4. Java7 新特性 switch 可以使用String
  5. js特效第九天
  6. ECSHOP在线手册布局参考图--积分商城 exchange_list.dwt
  7. python 之路,Day11(上) - python mysql and ORM
  8. 导出EXCEL(转转)
  9. 【转】Windows 7/8/8.1 硬盘安装法实现 ubuntu 14.04 双系统
  10. 【C++学习笔记1】
  11. Android Ant 和 Gradle 打包流程和效率对照
  12. Redis作为消息队列服务场景应用案例(入队和出队)
  13. &,^,|,的简化计算与理解
  14. day15-集合
  15. 步步为营101-同一个PCode下重复的OrderNumber重新排序
  16. HDU4609 计数问题+FFT
  17. Linux背背背(1)
  18. [BOOK] Applied Math and Machine Learning Basics
  19. JAVA之1000字感想
  20. mybatis拦截器案例之获取结果集总条数

热门文章

  1. Scala实战高手****第14课:Scala集合上的函数式编程实战及Spark源码鉴赏
  2. Java读取文本文件
  3. Delphi Delay 延时计数的功能。 下面的方法都是思路,但是没有用在项目上
  4. Ext js 应用例子
  5. Render Texture coordinates
  6. 验收测试 - WebDriver 5
  7. Selenium webdriver Java 开始
  8. POJ1037 A decorative fence 【动态规划】
  9. PgSql备份pg_dump与还原手记pg_restore(转)可以直接跳转至最后面的示例进行查看
  10. Centos6.2上做nginx和tomcat的集成及负载均衡(已实践)