饿汉式
package singleton;
public class Singleton {
private Singleton(){}
private static final Singleton instance = new Singleton()
public Singleton geInstance(){
return instance;
}
}
- 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
懒汉式
package singleton;
public class Singleton{
private Singleton(){};
private static Singleton instance = null;
public static Singleton getInstance(){
if(instance==null){
return new Singleton();
}
return instance;
}
}
- 懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例。
- 可以通过同步,对getInstance这个方法改造,
- 保证了懒汉式单例的线程安全