单例模式是我以前学Java最先接触的第一种模式,单例:一个类只实例化一次。一般我们的做法就是:
- 构造函数私有化
- 对外暴露一个供外界访问该实例的方法
其次单例又分为:
- 懒汉式
- 饿汉式
其实我觉得这都是国人通俗的叫法,外国人怎么可能起这样的名字
No 1:
public class Singleton{
private static Singleton instance;
private Singleton (){
}
//加锁(防止多线程访问,当然安全是安全了,但是效率低了)
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
No 2:
public class Singleton{
//上来直接就new (这就是饿汉和懒汉的区别)
private static Singleton instance=new Singleton();
private Singleton (){
}
//(不安全,效率高)
public static Singleton getInstance(){
return instance;
}
}
double-checked locking:双重校验锁
大家注意这个,我觉得这种方式写单例是最好的不信?look coding:
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
/*先判断对象是否实例化,没必要向上面一样,上来就加锁,效率太低
我们这里只要初始化实例后才加锁 */
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
好了,单例就是这么简单,不多解释了。