单例模式
饿汉写法:
public class Singleton {
private Singleton(){};
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
懒汉写法:
public class Singleton {
private static Singleton uniqueInstance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
有区别吗 ,那个比较好。
------解决方案--------------------饿汉式在加载时就将自己实例化了。从资源利用角度来讲,比懒汉式稍微差些,但从速度和反应时间来说,较懒汉式好。
------解决方案-------------------- public
synchronized static Singleton getInstance() 这里最好加同步处理多线程环境,不然可能导致不是单例
------解决方案-------------------- 哥们,你又来送分了么
------解决方案--------------------还要注意 synchronized 同步。 最近腰好没。
------解决方案--------------------饿汉式(加载类时创建实例)的优点是速度和反应时间教懒汉式单例类稍好些,无需关注多线程问题、写法简单明了、能用则用。缺点是比较占用内存资源(欢迎后面的接着补充)
懒汉式(需要时才创建对象)的优点是延时加载、缺点是应该用同步,会有线程安全上的问题(需双重检查加锁-double-check,会影响性能,特别是高并发的情况下更加)
------解决方案--------------------饿汉初始化根本不会存在线程安全问题,但开销是个问题,因为懒汉模式的使用理念是"用时才初始化",饿汉模式则是"不管用不用都初始化",这本身是和业界流行的资源使用习惯相违背的.
推荐 单例线程安全问题
------解决方案--------------------原来还有这种区分,以前只知道第二种 长姿势了!
------解决方案--------------------
java中不要使用双重检查
------解决方案--------------------不加同步可能创建出多个实例呢,还是个单例吗?
假设2个线程吧,它们同时到达 if (uniqueInstance == null),假设第一个线程早一点点进去,执行 new Singleton();此时uniqueInstance 还为null,知道new Singleton()返回赋值给uniqueIn