Javaでのシングルトンとは何ですか?
Javaでは、シングルトンとは、クラスが1つのインスタンスオブジェクトのみを作成できる設計パターンを指します。これは、クラスのインスタンスがすでに存在する場合、そのクラスのインスタンスを再度作成しようとすると、既存のインスタンスオブジェクトが返されることを意味します。シングルトンパターンは、グローバルアクセスポイント、リソース共有、インスタンス数の制御など、さまざまなシーンで使用されます。
Singletonパターンは、次の方法で実現できます:
- クラスの読み込み時にインスタンスオブジェクトを作成することで、ただ1つのインスタンスオブジェクトを確保する「饑餓型シングルトンモード」。
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
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;
}
}
上記は一般的に使用されるシングルトンパターンを実現するための3つの方法です。具体的なニーズやシナリオに合わせて適切な方法を選択してください。