Java 并发编程:常量对象
在创建后状态不再发生改变的对象称作常量对象(Immutable Objects)。常量对象其可靠
性使其广泛地用作开发简单可靠代码的策略。常量对象在开发并发程序中非常有用。由于
创建后不能被改变状态,它们不会被线程干扰所破坏,不可能产生不一致的观察状态。
Java 程序员通常不愿意使用常量对象,他们担心创建新对象的开销要比更新可变对
象状态的代价要大。对象创建代价通常被人们过分夸大,其影响往往可被常量对象带来的
好处所抵消。这些好处包括垃圾收集可以减少常量对象的内存开销,降低为防止可变对象
(mutable object)被破坏的代码复杂度。
下面举例说明使用常量对象给并发编程所带来的好处。SynchronizatedRGB 类是描
述颜色的类,它有三个整型字段表示颜色分量,一个字符串字段表示颜色名称:
1 public class SynchronizedRGB {
2
3 //Values must be between 0 and 255.
4 private int red;
5 private int green;
6 private int blue;
7 private String name;
8
9 private void check(int red, int green, int blue) {
10 if (red < 0 || red > 255
11 || green < 0 || green > 255
12 || blue < 0 || blue > 255) {
13 throw new IllegalArgumentException();
14 }
15 }
16
17 public SynchronizedRGB(int red, int green, int blue, String name) {
18 check(red, green, blue);
19 this.red = red;
20 this.green = green;
21 this.blue = blue;
22 this.name = name;
23 }
24
25 public void set(int red, int green, int blue, String name) {
26 check(red, green, blue);
27 synchronized (this) {
28 this.red = red;