java單例模式4種使用方式分享
1、Java Concurrency In Practice的List
public class Singleton {
private static class SingletonHolder {
public static Singleton resource = new Singleton();
}
public static Singleton getResource() {
return SingletonHolder.resource ;
}
private Singleton(){
}
}
2、effective Java
public class Singleton {
public static final Singleton INSTANCE = new Singleton();
private Singleton(){}
public void method(){
//...
}
public static void main(String[] a){
//調(diào)用方法。
Singleton.INSTANCE.method();
}
}
3、利用枚舉巧妙創(chuàng)建單實(shí)例
/**
* 利用枚舉巧妙創(chuàng)建單實(shí)例
*/
public enum Singleton {
INSTANCE;
public void method(){
//...
}
public static void main(String[] a){
//調(diào)用方法。
Singleton.INSTANCE.method();
}
}
4、雙重鎖
public class Singleton {
private static volatile Singleton instance = null;
/**
* 防止其他人new對象
*/
private Singleton(){
System.out.println("init");
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
相關(guān)文章
解決程序包org.springframework.test.context不存在
深入理解Java并發(fā)編程之LinkedBlockingQueue隊(duì)列
spring(java,js,html) 截圖上傳圖片實(shí)例詳解
java實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出
Java設(shè)計(jì)模式之備忘錄模式實(shí)現(xiàn)對象狀態(tài)的保存和恢復(fù)
SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程
SpringBoot整合Mybatis與druid實(shí)現(xiàn)流程詳解

