黑马程序员技术交流社区
标题:
懒汉式和饿汉式的区别是什么
[打印本页]
作者:
马晓平
时间:
2013-10-21 23:47
标题:
懒汉式和饿汉式的区别是什么
懒汉式和饿汉式的区别是什么?
作者:
张运
时间:
2013-10-22 00:01
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变.懒汉式则是在你使用的时候才创建对象,如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的.建议使用使用饿汉式
作者:
回天之力
时间:
2013-10-22 00:18
这是一个单例模式俩个名称:
1,饿汉式:
class Single
{
private static finally Single s=new Single();
private Single(){}
public static Single getInstence()
{
return s;
}
}
2,懒汉式
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstence()
{
if(s==null)
s=new Single();
return s;
}
}
一般编程用饿汉式
作者:
Simple_love
时间:
2013-10-22 01:56
赖汉式的特点是对实例的延迟加载,但是赖汉式延迟加载时,如果多线程访问,会出现安全问题, 为了避免安全问题, 可以加同步在解决安全问题,但是加同步之后, 由于每个都要判断锁, 所有效率低。如果效率提高,就要使用双重判断语句,
代码如下
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
复制代码
作者:
蓝雨星空
时间:
2013-10-22 07:00
最简单的区别就是创建对象的时机不同。饿汉式是一加载就创建对象,懒汉式是在调用方法时才去创建对象。
作者:
朱艳
时间:
2013-10-22 07:47
都是单例设计模式设计,要说不同的话,饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。推荐使用第一种。
但是也有大神说存在这样的问题:
饿汉式在声明实例变量时不加final关键字,并且非正常使用时可能存在问题:
第一个人使用时:
Singleton s = Singleton.getInstance();
s.executeMethod();
s = null; // 非正常使用
当另一个人使用时:
Java code
?
1
2
Singleton s = Singleton.getInstance();
s.executeMethod(); // throw a NullPointException
懒汉式则不存在此问题:
public class Singleton {
private static Singleton instance = new Singleton();
private static Object synObject = new Object();
private Singleton(){}
public static Singleton getInstance() {
if (instance!=null) {
return instance;
}
synchronized(synObject) {
if (instance==null) {
instance = new Singleton();
}
}
return instance;
}
public void executeMethod(...) {
...
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2