黑马程序员技术交流社区
标题:
懒汉饿汉
[打印本页]
作者:
黎阳05
时间:
2013-5-2 15:49
标题:
懒汉饿汉
本帖最后由 黎阳05 于 2013-5-2 20:01 编辑
谁能告诉我懒汉式和饿汉式的区别。。。
作者:
原满
时间:
2013-5-2 15:52
懒汉式是延时加载,他是在需要的时候才创建对象,如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
作者:
殇_心。
时间:
2013-5-2 15:53
懒汉式:对象是方法被调用时,才初始化,
叫对象的延时加载。线程不安全。
饿汉式:先初始化对象。 线程安全。
作者:
吴传淦
时间:
2013-5-2 15:54
懒汉式:对象是方法被调用时,才初始化
饿汉式:类一进内存,就已经创建好了对象
作者:
壹旪傾峸
时间:
2013-5-2 15:57
饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public Singleton getInstance(){return singletion;}
}
懒汉式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种
作者:
壹旪傾峸
时间:
2013-5-2 15:58
补充:懒汉式没有加私有的构造函数
从实现方式来讲他们最大的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,
使用的场合根据具体环境和个人习惯吧.
作者:
花开花落总相似
时间:
2013-5-2 17:48
饿汉式 是刚开始 就建立了对象 懒汉式 就是等到你用的时候才建立了对象 楼上正解 建议饿汉式
作者:
蔚蓝小嗨
时间:
2013-5-2 19:09
饿汉式:类一进内存,就已经创建好了对象。线程是安全的
懒汉式:类进内存,对象还没有存在,只有方法被调用时,才建立对象,也叫对象的延时加载。如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的,效率没饿汉式高
作者:
DMY2008
时间:
2013-5-4 23:39
噢噢、原来是这样的!!
作者:
严海燕
时间:
2013-5-5 14:48
/*饿汉式
类一进内存,就已经创建好了对象。线程是安全的 */
class Single
{
private static final Single s = new Single();
private Single()
public static Single getInstance()
{
return s;
}
}
/*懒汉式
在访问多线程时会产生安全隐患
懒汉式加同步会比较低效
用双重判断的形式能解决效率问题,加同步使用的锁是哪一个,该类所属的字节码对象。
*/
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;
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2