Javaのシングルトンパターンの実装コードはどのように書きますか。
Javaでシングルトンクラスを実装する方法の例を以下に示します。
- シングルトン(スレッドセーフ)
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- 非スレッドセーフ
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- スレッドセーフ、二重チェックロック
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- 静的内部クラス(スレッドセーフ)
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
以上は単一インスタンスタンスのパターンを実現する一般的な方法の一例であり、適切な方法の選択は要件とスレッド安全性の要件によって異なります。