- public class Singleton {
- private static volatile Singleton instance = null;
- private Singleton(){
- }
- public static Singleton getInstance() {
- if (instance == null) {
- synchronized (Singleton.class) {
- if (instance == null) {
- instance = new Singleton();
- }
- }
- }
- return instance;
- }
- }
Singleton 这是一个单例的类
优点:
1,对于那些耗内存的类,只实例化一次,大大提高性能,尤其是移动开发中
2,程序运行中,始终保持只有一个实例在内存中
解释: private Singleton() 私有的构造方法让我们无法在外部创建新的
对象。只允许在类的内部使用。
private static volatile Singleton instance = null;
static 是表示这个变量使用唯一的内存地址。
volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从内存中读取,不会因为多线程而导致一些BUG。
再就是这个双重判断null :
这是因为如果线程A进入了该代码,线程B 在等待,这是A线程创建完一个实例出来后,线程B 获得锁进入同步代码,实例已经存在,木有必要再创建一个,所以双重判断有必要。
2019年3月15日补充
还有静态代码块,会在项目启动时运行,并且只运行一次。
static{
private static volatile Singleton instance = new Singleton ();
}
然后相应取出来使用就好了