黑马程序员技术交流社区
标题: 多线程中单例设计模式问题: [打印本页]
作者: jlq 时间: 2015-11-5 23:27
标题: 多线程中单例设计模式问题:
单例设计模式:一种有两种:懒汉式和饿汉式。
示例:
//单例设计模式
//恶汉式
class Single{
private static final Single s=new Single();
private Single(){}
public static Single getInstance(){
return s ;
}
}
//懒汉式也被称为延迟加载
class Single1{
private static Single1 s= null;
private Single1(){}
public static Single1 getInstance(){
if(s ==null)
//---->A----->B多线程访问
s= new Single1();//延迟加载
return s ;
}
}
*****如果有多线程对共享数据S进行访问,就会出现安全隐患。
------------------------》加同步解决安全问题。----------------------------------
1)同步函数
//懒汉式
class Single1{
private static Single1 s =null;
private Single1(){}
public static synchronized Single1 getInstance(){//效率低-->同步代码块
if(s ==null)
s= new Single1();
return s ;
}
}
如果是多线程,为了获得实例,进来的时候都要进行同步锁的判断,就比较低效。因此,懒汉式的方法比较低效。
2)同步代码块
//懒汉式
class Single1{
private static Single1 s =null;
private Single1(){}
public static synchronized Single1 getInstance(){//效率低-->同步代码块
if(s ==null){
synchronized(Single1.class ){//对象是:该类所属字节码文件的class
if(s ==null)
s= new Single1();
}
}
return s ;
}
}
用双重判断解决低效,提高了懒汉式的效率
**************所以使用的时候,选择饿汉式比较方便,比好好。***************
作者: 石三伢子1 时间: 2015-11-6 12:58
Single1.class,一直不明白这是什么,烦请大神解释一下;
作者: 大自然的搬运工 时间: 2015-11-6 14:52
字节码文件,就是java源程序编译之后的机器认识的二进制文件,就是类名.class 俗称class文件或字节码文件,JVM运行时加载这个文件,主要用用在反射那一块
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |