基于多线程并发的单例模式
/**
* 1、外界不能随意创建实例
* 2、通过静态方法去获取实例
* 3、保证类的实例,创用且仅创建一次 getInstance()
*
* @author Ganymede
*
*/
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
/**
* 需要考虑多线程的问题,可能会创建多个单例
*
* 多线程访问并发的安全控制
*
* 方法上加上synchronize
* public static synchronized Singleton getInstance()
* 第一次调用是可以,避免创建多个实例
* 但是,以后多个线程访问的时候,就会在方法级别上同步,降低性能
*
* @return
*/
public static Singleton getInstance() {
//两步检查机制
if (instance == null) {
synchronized (Singleton.class) { // 这个类对应的对象,做为访问同步监视器
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}