一、懒汉式

public class LazySingleton
{
    private static LazySingleton instance = null;

    private LazySingleton()
    {
    }

    public static synchronized LazySingleton getInstance()
    {
        if (instance == null)
        {
            instance = new LazySingleton();
        }
        return instance;
    }
}

二、饿汉式

public class EagerSingleton
{
    private static EagerSingleton instance = new EagerSingleton();

    private EagerSingleton()
    {
    }

    public static EagerSingleton getInstance()
    {
        return instance;
    }
}

三、优化版(双重校验锁)

public class Singleton
{
    private volatile static Singleton singleton = null;

    private Singleton()
    {
    }

    public static Singleton getSingleton()
    {
        if (singleton == null)
        {
            synchronized (Singleton.class)
            {
                if (singleton == null)
                {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

更多阅读 http://cantellow.iteye.com/blog/838473