你的主题应该改为 怎样在多线程的情况下得到单例。
你的三个方法都可以做到
引用
1:
package net.chopsuey.singleton;
public class Singleton
{
private static class SingletonHolder
{
static Singleton instance = new Singleton();
}
public static Singleton getInstance()
{
return SingletonHolder.instance;
}
}
2:
package net.chopsuey.singleton;
public final class EagerSingleton
{
private static EagerSingleton singObj = new EagerSingleton();
private EagerSingleton()
{
}
public static EagerSingleton getSingleInstance()
{
return singObj;
}
}
3:
package net.chopsuey.singleton;
public final class LazySingleton
{
private static LazySingleton singObj = null;
private LazySingleton()
{
}
public static LazySingleton getSingleInstance()
{
if (singObj == null)
{
singObj = new LazySingleton();
}
return singObj;
}
你的主题
引用
java单例模式的线程安全问题
你想想。多个线程拿到了同一个实例。那这个实例还安全吗??
所以你应该在多个线程只有一个线程拿到了这个实例。所以你要加锁
如它
引用
public class Singleton(){
private volatile static Singleton singleton;
private Sington(){};
public static Singleton getInstance(){
if(singleton == null){
synchronized (Singleton.class);
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
2009年3月04日 14:11