当前位置:嗨网首页>书籍在线阅读

03-尽可能使用不可变对象

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.2 尽可能使用不可变对象

在Java中,以面向对象的方式开发应用时,我们会创建一些由属性和方法组成的类。这些方法决定了能用类执行的操作。而属性则存储了用于定义对象的数据。通常,在每个类中都会实现一些方法来设置属性的值。随着应用程序的运行,当需要修改对象时,就可以使用这些方法来修改对象的属性值。

在开发一个并发应用程序时,需要特别注意多线程共享的对象。必须采取同步机制来保护这些对象的访问。否则,很可能在应用程序中出现数据不一致的问题。

开发并发程序时,可以实现一种特殊对象,即 不可变对象 (immutable)。这种对象的特性是创建后无法修改的。如果要修改不可变对象,则必须创建一个新对象,并将老对象中要修改的值设置到新对象中。

在并发应用中,该机制具有如下优势。

  • 因为一旦创建了这种对象,就无法由任何线程来修改,所以不需要使用同步机制来保护对其属性的访问。
  • 因为它不会产生数据不一致的问题(这种对象的属性是无法修改的),所以每次访问所产生的数据副本都是一致的。

这种方式的唯一缺点就是开销:它以创建新对象的方式替代了对老对象的修改。

Java提供了一些不可变类,比如 String 类。在为一个存在的 String 对象指定新值时,并不是修改了旧值,而是新建了一个 String 对象。例如,如下代码在第二行里,JVM创建了一个新的 String 对象。

String var = "hello";
var = "new";