共計(jì) 1005 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
在 Java 中,可以使用以下幾種方式將一個(gè)類變成單例:
- 餓漢式單例模式:在類加載時(shí)就創(chuàng)建單例實(shí)例,保證了線程安全性,但可能會(huì)造成資源浪費(fèi)。
public class Singleton {private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {return instance;}
}
- 懶漢式單例模式:在需要時(shí)才創(chuàng)建單例實(shí)例,避免了資源浪費(fèi),但在多線程環(huán)境下需要考慮線程安全性。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();
}
return instance;
}
}
- 雙重校驗(yàn)鎖單例模式:通過雙重校驗(yàn)鎖的方式,在多線程環(huán)境下保證了線程安全性,同時(shí)減少了鎖的使用次數(shù),提高了性能。
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();
}
}
}
return instance;
}
}
- 靜態(tài)內(nèi)部類單例模式:通過靜態(tài)內(nèi)部類的方式實(shí)現(xiàn)延遲加載和線程安全性。
public class Singleton {private Singleton() {}
private static class SingletonHolder {private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {return SingletonHolder.instance;}
}
以上是幾種常見的將類變成單例的方式,選擇哪種方式取決于具體的需求和線程安全性要求。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!
正文完