黑马程序员技术交流社区
标题:
单例模式
[打印本页]
作者:
游呤人
时间:
2015-7-19 01:21
标题:
单例模式
本帖最后由 游呤人 于 2015-7-19 23:31 编辑
public class Single{
private static final Single single;
private Single(){}
public static Single getSingle(){
if(single==null){
synchronized(Single.class){
if(single==null){
single=new Single();
}
}
}
return single;
}
}
public class Single {
private Single(){}
private static final Single single =new Single();
public static Single getSingle(){
return single;
}
//下面功能的代码
} //饿汉式 构造器私有化,定义本类私有成员常量并实例化,定义静态提供函数
复制代码
感谢:
joe520kay
wing-SF
李林_
三位的回复
作者:
eayonh
时间:
2015-7-19 02:49
作者:
mortonnnn
时间:
2015-7-19 07:15
挺好的哈哈。
作者:
fantianfei
时间:
2015-7-19 08:48
温习了一半
作者:
joe520kay
时间:
2015-7-19 10:00
补充说明:懒汉式与饿汉式的区别在于:懒汉式是在调用时才产生实例化对象。
作者:
wing-SF
时间:
2015-7-19 10:35
本帖最后由 wing-SF 于 2015-7-19 10:36 编辑
哥们在懒汉式中,你如果这么写,还有有一点点小问题的,可以使用双重判断提高效率如下:public class Single(){
private static final Single single;
private Single(){}
public static Single getSingle(){
if(single==null){
synchronized(Single.class){
if(single==null){
single=new Single();
}
}
}
return single;
}
}
作者:
李林_
时间:
2015-7-19 11:03
楼上顶一个,楼主,假设现在有三个线程 我们来看怎样获取 Single 它的实例 。
那么 线程1 进入 进入获取实例方法 进了synchronized (Single.class)同步方法后获取实例 出了同步方法,
线程2 继续进了同步方法发现实例不为空 出了同步方法,
线程3 继续进了同步方法发现实例不为空 出了同步方法。
按楼上的进行走一遍,
线程1 进入获取实例方法 首先判断是否有 Single 它的实例。如果没有 进入synchronized (Single.class)同步方法 , 同样再一次进入判断 没有 就获取 Single 它的实例。
线程2 首先会判断是否有实例,如果有就不进synchronized (Single.class)同步方法 。
线程3 同上。
经过上边的分析,也就是说用楼上的方法,效率会高一些,那么会高在哪里? 我们首先来看 同步的机制,
当一个线程进了同步的方法时,另一个线程只有等到 进入同步的线程走完了后才能 进去,大大影响了效率。
ps. 真正运行的时候 不一定是按我所分析的线程1、线程2、线程3这个顺序来的,取决于电脑的cpu,但是流程基本差不多, 还有一点 , 就是 static 有这个修饰符说明在jvm加载 class是的时候就给他一份空间,不在堆区和栈区。同时也方便更好的调用,final ,就不用说了吧!
作者:
gaoming971366
时间:
2015-7-19 11:05
懒汉式,恶汉式,学习了
作者:
张玉久
时间:
2015-7-19 11:15
作者:
游呤人
时间:
2015-7-19 23:11
李林_ 发表于 2015-7-19 11:03
楼上顶一个,楼主,假设现在有三个线程 我们来看怎样获取 Single 它的实例 。
那么 线程1 ...
多谢回复 是我欠考虑了
作者:
游呤人
时间:
2015-7-19 23:18
李林_ 发表于 2015-7-19 11:03
楼上顶一个,楼主,假设现在有三个线程 我们来看怎样获取 Single 它的实例 。
那么 线程1 ...
那么如果我标记的是方法呢
作者:
Xia_
时间:
2015-7-19 23:34
我居然看不懂:'( 恶补去
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2