单例模式 确保一个类只有一个实例,并提供一个全局访问点。
最简单的单例模式,不适用于多线程下使用
package demo;
/**
* 同步情况下使用, 多线程下可能会产生多个Singleton实例
*
* @author wy
*
*/
public class Singleton {
private static Singleton singleton;
private Singleton() {
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
多线程下也可使用的单例模式:
package demo;
/**
* 保證了多线程下祇能产生一个Singleton实例
*
* @author wy
*
*/
public class NewSingleton {
private static NewSingleton singleton = new NewSingleton();
private NewSingleton() {
}
public static NewSingleton getInstance() {
return singleton;
}
}
package demo;
/**
* 双重检查加锁,防止多线程情况下产生多个Singleton
*/
import sun.security.jca.GetInstance;
public class OtherSingleton {
private volatile static OtherSingleton singleton;
private OtherSingleton() {
}
public static OtherSingleton GetInstance() {
if (singleton == null) {
synchronized (OtherSingleton.class) {
if (singleton == null) {
singleton = new OtherSingleton();
}
}
}
return singleton;
}
}