java二重ロックシングルトンパターンの実装方法
多重ロックシングルトンパターンは、複数スレッド環境でインスタンスが一つだけ確実に生成されるようにする手法です。以下は、多重ロックシングルトンパターンを使用した Java コードの例です。
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
getInstance()メソッドは、インスタンスが既にあるかどうかをまずチェックし、無ければ同期ブロックへ入ります。同期ブロックに入ったら、再度インスタンスが既にあるかチェックするのは、複数のスレッドが同時に同期ブロックに入って、インスタンスが複数作られてしまう可能性を避けるためです。volatileキーワードによって、マルチスレッド環境下でinstance変数の可視性と順序制が保証され、命令の並び替えによる問題を回避しています。
二重ロックシングルトンパターンは、マルチスレッド環境でインスタンスが1つのみ作成されることを保証し、インスタンスが使用されるまでインスタンス化を行わないため、パフォーマンスが向上します。