package com.webex.annotation;
//饿汉式: 没有线程安全问题
class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public Singleton getInstance() {
return singleton;
}
}
// 懒汉式(1):
//单重检查模式:有重复初始化的情况
class Singleton2 {
private static Singleton2 singleton = null;
public static Singleton2 getInstance() {
if (singleton == null) {
singleton = new Singleton2();
}
return singleton;
}
}
//懒汉是2:线程安全的方式
class Singleton3 {
private static Singleton3 singleton = null;
public static Singleton3 getInstance() {
if (singleton == null) {
singleton = new Singleton3();
}
return singleton;
}
}
//// 懒汉式3:
//双重检查模式: 此处省略
// 懒汉式4:
public class Test {
private static class TestHolder {
static{
System.out.println("init");
}
final static Test instance = new Test();
}
public Test getInstance() {
return TestHolder.instance;
}
}
// 比较:
/*饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
推荐使用第一种 ,如果用第二种,则推荐使用懒汉是4*/