懒汉式与饿汉式的区别
java设计模式单例模式 ----懒汉式与饿汉式的区别
常⽤的五种单例模式实现⽅式
——主要:
1.饿汉式(线程安全,调⽤率⾼,但是,不能延迟加载。)
2.懒汉式(线程安全,调⽤效率不⾼,可以延时加载。)
——其他:
1.双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题,不建议使⽤)
2.静态内部类式(线程安全,调⽤效率⾼。但是,可以延时加载)
3.枚举式(线程安全,调⽤率⾼,不能延时加载)
如何选⽤?
——单例对象占⽤资源少,不需要延时加载
枚举式好于饿汉式
——单例对象占⽤资源⼤,需要延时加载
静态内部类式好于懒汉式
下⾯介绍⼀下 java设计模式单例模式中懒汉式与饿汉式的区别
饿汉式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public static 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则会导致对对象的访问不是线程安全的
推荐使⽤第⼀种
java单例模式懒汉和饿汉从实现⽅式来讲他们最⼤的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,⽽饿汉式在虚拟机启动的时候就会创建,
饿汉式⽆需关注多线程问题、写法简单明了、能⽤则⽤。但是它是加载类时创建实例(上⾯有个朋友写错了)、所以如果是⼀个⼯⼚模式、缓存了很多实例、那么就得考虑效率问题,因为这个类⼀加载则把所有实例不管⽤不⽤⼀块创建。
懒汉式的优点是延时加载、缺点是应该⽤同步(想改进的话现在还是不可能,⽐如double-check)、其实也可以不⽤同步、看你的需求了,多创建⼀两个⽆引⽤的废对象其实也没什么⼤不了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论