
5
章
Singleton
パターン
you are here
181
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return uniqueInstance;
}
}
このアプローチでは、クラスをロードするときに
JVM
が
Singleton
の唯一のインスタンス
を作成してくれます。
JVM
は、スレッドがスタティック変数
uniqueInstance
にアクセスす
る前にインスタンスが作成されていることを保証します。
マルチスレッドを改善できるか?
ほとんどの
Java
アプリケーションでは、マルチスレッドで
Singleton
を正しく動作させる
必要があることは明らかです。しかし、
getInstance()
メソッドの同期化はコストが高いも
のです。どうすればよいでしょうか?
これにはいくつかの選択肢があります。
1. getInstance()
のパフォーマンスがアプリケーションにとって重要でないなら、
何もしない。
そうです。
getInstance()
メソッドの呼び出しが多大なオーバーヘッドを引き起こすわけ
でないのなら、無視しても構いません。
getInstance()
の同期化は、わかりやすく効果的です。
ただ、メソッドの同期化によって、パフォーマンスが
100