最近看到了 单例 这块,简单记录下
单例就是该类只能返回一个实例。
单例所具备的特点:
1.私有化的构造函数
2.私有的静态的全局变量
3.公有的静态的方法
单例分为:懒汉式、饿汉式和双层锁式
饿汉式::先初始化对象 single类一进内存,就已经创建好了对象
public class Singleton1 {
private Singleton1() {};
private staticSingleton1 single = new Singleton1();
public static Singleton1getInstance() {
return single;
}
}
懒汉式:对象是方法被调用时,才初始化,也叫做对象的延迟加载
single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
public class Singleton2 {
private Singleton2() {}
private staticSingleton2 single=null;
public tatic Singleton2getInstance() {
if (single == null){
single = newSingleton2();
}
return single;
}
}
线程安全:
public class Singleton3 {
private Singleton3() {}
private static Singleton3 single ;
public static Singleton3 getInstance() {
if(null == single){
synchronized(single){
if(null ==single){
single= new Singleton3();
}
}
}
return single;
}
}
通过双重判断来保证单列设计模式在多线程中的安全性,
并且它在性能方面提高了很多。
synchronized在方法上加锁(同步锁)
synchronized在代码块内部加锁 (同步代码块)
synchronized(同步锁)
那么使用synchronized如何解决线程安全的问题?
1.synchronized在方法上加锁
2.synchronized在代码块内部加锁