单例模式(Singleton Pattern)

定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
通用代码:(是线程安全的)

public class Singleton {
private static final Singleton singleton = new Singleton();

//限制产生多个对象 private Singleton(){

}
//通过该方法获得实例对象
public static Singleton getSingleton(){

return singleton;

}
//类中其他方法,尽量是 static public static void doSomething(){ }

}

使用场景:
●要求生成唯一序列号的环境;
●在整个项目中需要一个共享访问点或共享数据,例如一个 Web 页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;
●创建一个对象需要消耗的资源过多,如要访问 IO 和数据库等资源;
●需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为 static 的方式)。
线程不安全实例:

public class Singleton {
private static Singleton singleton = null; //限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){

if(singleton == null){
singleton = new Singleton();

}

return singleton;

}

}

解决办法:
在 getSingleton 方法前加 synchronized 关键字,也可以在 getSingleton 方法内增加 synchronized 来实现。最优的办法是如通用代码那样写。

回复

我来回复
  • 暂无回复内容

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部