单例模式 很多都会写 面试的时候也经常问 于是乎顺手就写了一个
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getSingleton(){
return singleton;
}
}
由于这种启动加载,为了减小负载需要延迟加载 于是有了
public class Singleton {
private static Singleton singleton = null;
private Singleton(){}
public static Singleton getSingleton(){
if(singleton == null)
singleton = new Singleton();
return singleton;
}
}
确实延迟加载了 但如果多线程的话 是不是可能出现多个了呢
于是我们考虑线程安全 进行加锁
public class Singleton {
private static Singleton singleton = null;
private Singleton() {
}
public static Singleton getSingleton() {
synchronized (Singleton.class) {
if (singleton == null)
singleton = new Singleton();
}
return singleton;
}
}
但这样一想每次都要来进行锁判断 而单例一旦创建了后面就存在了不用进null判断了 这样效率是不是还可以提高一点
public class Singleton {
private static Singleton singleton = null;
private Singleton() {
}
public static Singleton getSingleton() {
if (singleton == null)
synchronized (Singleton.class) {
if (singleton == null)
singleton = new Singleton();
}
return singleton;
}
}
原来单例也不简单啊,虽然现在自己手写不多 很多都用框架来代替了但自己设计一些底层编写时还是会用到
来源:oschina
链接:https://my.oschina.net/u/1584347/blog/672854