background image

Java 并发编程:常量对象

在创建后状态不再发生改变的对象称作常量对象(Immutable Objects)。常量对象其可靠
性使其广泛地用作开发简单可靠代码的策略。常量对象在开发并发程序中非常有用。由于
创建后不能被改变状态,它们不会被线程干扰所破坏,不可能产生不一致的观察状态。
  Java 程序员通常不愿意使用常量对象,他们担心创建新对象的开销要比更新可变对
象状态的代价要大。对象创建代价通常被人们过分夸大,其影响往往可被常量对象带来的
好处所抵消。这些好处包括垃圾收集可以减少常量对象的内存开销,降低为防止可变对象
(mutable object)被破坏的代码复杂度。
  下面举例说明使用常量对象给并发编程所带来的好处。SynchronizatedRGB 类是描
述颜色的类,它有三个整型字段表示颜色分量,一个字符串字段表示颜色名称:
1 public class SynchronizedRGB {

3     //Values must be between 0 and 255.
4     private int red;
5     private int green;
6     private int blue;
7     private String name;

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;