Java實現單例模式的幾種方式
阿新 • • 發佈:2021-06-30
單例模式(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
}