1. 程式人生 > 其它 >Java實現單例模式的幾種方式

Java實現單例模式的幾種方式

單例模式(Singleton),保證在程式執行期間,記憶體中只有一個例項物件。

餓漢式,最常用的方式。JVM載入類到記憶體中時,建立例項,執行緒安全。

public class Boss
{
    private static final Boss boss = new Boss();

    private Boss(){}

    public static Boss getBoss()
    {
        return boss;
    }
}

懶漢式,存線上程安全問題,一般不用

public class Boss
{
    private static Boss boss;

    private Boss(){}

    public static Boss getInstance()
    {
        if(boss==null)
        {
            boss= new Boss();
        }
        return boss;
    }
}

懶漢式,使用加鎖的方式解決執行緒安全問題

public class Boss
{
    private static volatile Boss boss;

    private Boss()){}

    public static Boss getInstance()
    {
        if(boss==null)
        {
            synchronized(Boss.class)
            {
                if(boss==null)
                {
                    boss= new Boss();
                }
            }
        }
        return boss;
    }
}

使用靜態內部類,在內部類中持有外部類的例項,從而實現懶載入,並保證執行緒安全性。

寫法不太直觀,不常用

public class Boss
{
    private Boss(){}

    private static class BossHolder
    {
        private static final Boss boss = new Boss();
    }

    public static Boss getInstance()
    {
        return BossHolder.boss;
    }
}

終極寫法!《Effective Java》中推薦的寫法,使用列舉,乾淨利落!

public enum Boss
{
    INSTANCE
}