【图解Java多线程设计模式】Immutable模式

Immutable模式中存在着确保实例状态不发生改变的类(immutable类)。在访问这些实例时并不需要执行耗时的互斥处理,能提高程序性能。

示例

Person.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Person {
private final String name;
private final String address;

public Person(String name, String address) {
this.name = name;
this.address = address;
}

public String getName() {
return name;
}

public String getAddress() {
return address;
}

public String toString() {
return "[ Person: name = " + name + ", address = " + address + " ]";
}
}

Main.java

1
2
3
4
5
6
7
8
9
public class Main {

public static void main(String[] args) {
Person alice = new Person("Alice", "Alaska");
new PrintPersonThread(alice).start();
new PrintPersonThread(alice).start();
new PrintPersonThread(alice).start();
}
}

PrintPersonThread.java

1
2
3
4
5
6
7
8
9
10
11
12
13
public class PrintPersonThread extends Thread {
private Person person;

public PrintPersonThread(Person person) {
this.person = person;
}

public void run() {
while (true) {
System.out.println(Thread.currentThread().getName() + " prints " + person);
}
}
}

登场角色

Immutable(不可变的)

Immutable角色是一个类,在这个角色中,字段的值不可以修改,也不存在修改字段内容的方法。Immutable角色的实例被创建后,状态将不再发生变化。这时,无需对Immutable角色应用Single Threaded Execution模式。也就是说,无需将Immutable角色的方法声明为synchronized。在示例程序中,由Person类扮演此角色。

类图

iOAuUP.md.png

Timethreads图

iOAK4f.md.png