■ 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