欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 单例模式

程序员文章站 2022-03-07 18:05:48
...
所谓的饱汉模式就是指:我们在其他线程想来获取实例化对象的时候,我们早就把这个对象的实例保存在内存中了。
代码如下:

private SingleThread(){}
private static SingleThread instance = new SingleThread();//饱汉模式
public static SingleThread getInstance(){
return instance;
}


所谓的饿汉模式就是指:只有刚开始的时候,我们并没有把对象实例化到内存中,而是要等到其他线程来调用的时候才实例化对象,并且以后就一直在内存中维持一份就OK了。
代码如下:

private SingleThread(){}
private static SingleThread instance = null;//饿汉模式
public static synchronized SingleThread getInstance(){
if(instance==null){
instance = new SingleThread();
}
return instance;
}


所谓的双重校验模式:鉴于饿汉模式中,每次的线程调用都要使用synchronized来做一次线程同步,这个开销对于我们的一些大型的分布式应用来说,是不希望出现这种情况的。比如淘宝这样大型的电子商务网站,恨不得消费者对应用的每次操作都立马得到响应,哪怕是提供几毫秒,对淘宝收入都是很大的响应。所以事实上饿汉模式中,我们只需要在第一次调用的时候来加锁,其他时候,我们就可以直接来判断实例是否为空就可以了:
代码如下:

private SingleThread(){}
private static SingleThread instance = null;//双重校验模式
public static SingleThread getInstance(){
if(instance==null) {
synchronized (SingleThread.class) {
if(instance==null){
instance = new SingleThread();
}
}
}
return instance;
}


如何选择的话,看具体的应用,但总的来说双重校验模式比较受欢迎。
相关标签: Singleton