Singleton単列モードのjava実装
Singleton単列モードは実際に応用される機会が多い.
最近出会ったばかりなので、ついでにまとめてみました.
一、最も一般的な実装は以下の通りである:(マルチスレッドはサポートされていない)
二、マルチスレッド環境で使用する場合:
この実装には、別の実装形態がある.
三、The solution of Bill Pugh、直接コピーしたもの.
3つ目を使うことをお勧めします.
最近出会ったばかりなので、ついでにまとめてみました.
一、最も一般的な実装は以下の通りである:(マルチスレッドはサポートされていない)
public class Singleton
{
private static Singleton singleton=null;
private Singleton(){}
public static Singleton instance()
{
if(singleton==null)
singleton = new Singleton();
return singleton
return singleton;
}
}
二、マルチスレッド環境で使用する場合:
public class Singleton
{
private volatile static Singleton singleton=null;
private Singleton(){}
public static Singleton getInstance()
{
if(singleton==null)
{
synchronized(Singleton.class)
{
if(singleton==null)
{
singleton=new Singleton();
}
}
}
return singleton;
}
}
この実装には、別の実装形態がある.
public class Singleton
{
private static Singleton singleton = new Singleton();
private Singleton();
public static Singleton getInstance()
{
return singleton;
}
}
三、The solution of Bill Pugh、直接コピーしたもの.
public class Singleton {
// Private constructor prevents instantiation from other classes
private Singleton() {}
/**
* SingletonHolder is loaded on the first execution of Singleton.getInstance()
* or the first access to SingletonHolder.INSTANCE, not before.
*/
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
3つ目を使うことをお勧めします.