■ Immutable
* 壊したくとも、壊せない (インスタンスの内容が変化しない) * immutable(イミュータブル) = 不変の
特徴 / 利点
別にたいしたことはない* フィールドに対してsetterを提供せず、getterだけを提供 => 値は変更できない => メソッドなどにsynchronizedをつけて排他制御をする必要がない => 【利点】パフォーマンス向上につながる
■ サンプル
Person.java
フィールドに対してsetterを提供せず、getterだけを提供しているpublic class Person {
private long id;
private String name;
public Person(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public String toString() {
return "ID " + this.id + " Name " + this.name;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person person1 = new Person(1, "Mike");
new PrintThread(person1).start();
new PrintThread(person1).start();
Person person2 = new Person(2, "Tom");
new PrintThread(person2).start();
}
}
PrintThread.java
public class PrintThread extends Thread {
private Person person;
public PrintThread(Person person) {
this.person = person;
}
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(Thread.currentThread().getName() + " : "
+ this.person.toString());
}
}
}
出力結果
Thread-0 : ID 1 Name Mike Thread-2 : ID 2 Name Tom Thread-1 : ID 1 Name Mike Thread-0 : ID 1 Name Mike Thread-2 : ID 2 Name Tom Thread-0 : ID 1 Name Mike Thread-1 : ID 1 Name Mike Thread-1 : ID 1 Name Mike Thread-2 : ID 2 Name Tom
参考文献
プログラム例
http://photochau.moo.jp/webchau/?p=8716説明
http://blog.livedoor.jp/kosuke_pg/archives/51764641.htmlhttp://d.hatena.ne.jp/tubaki56/20110925/1316935984
関連記事
デザインパターン / マルチスレッド の分類 ~目次~
http://blogs.yahoo.co.jp/dk521123/34195603.htmlアクセサ ~ getter / setter ~
* 「[3] 参照可能で代入不可のプロパティを作れる」を参照http://blogs.yahoo.co.jp/dk521123/33187004.html