饿汉式
/**
* 饿汉式方法
* 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
*
*/
public class Singleton4 {
private static final Singleton4 single = new Singleton4();
public static Singleton4 getInstance() {
return single;
}
}
懒汉式
/**
* 懒汉式方法1
* @author Administrator
*
*/
public class Singleton1 {
private static Singleton1 single;
public static synchronized Singleton1 newInstance(){
if(single==null){
single = new Singleton1();
}
return single;
}
}
/**
* 懒汉式2,双重检查锁定
* @author Administrator
*
*/
public class Singleton2 {
private static Singleton2 single;
public static Singleton2 newInstance(){
if(single==null){
synchronized (Singleton2.class) {
if(single==null){
single = new Singleton2();
}
}
}
return single;
}
}
/**
*懒汉模式3
*这种比上面1、2都好一些,既实现了线程安全,又避免了同步带来的性能影响。
*/
public class Singleton3 {
/**
*设置为静态内部类
*
*/
private static class LazyHolder {
private static final Singleton3 INSTANCE = new Singleton3();
}
private Singleton3() {
}
public static final Singleton3 getInstance() {
return LazyHolder.INSTANCE;
}
}