java-并发-不可变对象

Posted Justforcon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-并发-不可变对象相关的知识,希望对你有一定的参考价值。

  当一个对象创建后的状态不可改变时就认为其为不可变对象,尽可能地利用不可变对象被公认为是构建简单可靠代码的有效方法。不可变对象在并发程序中比较有用,由于其状态无法改变,因此无法被线程的干扰损坏或者被视为不一致状态。

  程序员一般不愿意使用不可变对象,因为他们担心创建一个新对象可能会比更新一个已有对象的状态代价更大,然而往往创建一个对象的影响会被高估,而且会被与不可变对象相关的高效性补偿,这包括降低垃圾回收的开支,免除需要防止可变对象被损坏的代码。

  不可变对象语法上没有新的内容,以下定义了一些创建不可变对象的规则,当然不是所有被认为不可变的类都遵从以下规则,是否需要使用不可变对象需要经过系统的分析。

  1. 不要使用setter方法--一般setter方法是更改对象中的字段的方法。
  2. 定义所有的字段为final和private
  3. 不要允许子类覆写类中的方法,最简单的方法就是声明该类为final,一个更复杂的方法就是定义构造器为private,创建实例时,使用工厂方法。
  4. 如果实例字段包含引用的对象,不要使这些对象改变:(1)不要提供更改可变对象的方法(2)不要共享对可变对象的引用,不要存储传给构造器的外部可变对象;如果有必要,复制一个对象,并引用其副本。同样的,有必要时类中的方法返回内部可变对象的副本而不是原对象。

 

以上是关于java-并发-不可变对象的主要内容,如果未能解决你的问题,请参考以下文章

Java并发编程不变性

实战并发编程 - 05等效不可变对象CopyOnWriteArrayList适用场景剖析_写时复制COW

大厂P7 Java程序员高频面试题-4

java中是啥是不可变对象和可变对象

Java 并发编程对象的不变性和安全的公布对象

并发编程-线程安全策略之不可变对象