确保某个对象在jvm中,只实例化一个对象。好处
1、减少new操作,降低内存使用率,减少GC压力
2、对于某个类创建对象比较频繁,对象比较大型,单例可以降低系统开销
public class Singleton1 {
private static Singleton1 instance = null;
private Singleton1(){
}
//线程不安全
public synchronized Singleton1 getInstance(){
if(instance == null){
instance = new Singleton1();
}
return instance;
}
}
虽然上面的代码可以基本满足单例的要求,但是线程不安全,放在多线程的环境下就应该有问题。解决方法是在getInstance方法中加上
public class Singleton1 {
private static Singleton1 instance = null;
private Singleton1(){
}
public synchronized Singleton1 getInstance(){
if(instance == null){
instance = new Singleton1();
}
return instance;
}
}
上面synchronized关键,在每次调用getInstance方法的时候都要对对象上锁,对性能不好。改进一下,只有第一次创建对象的时候上锁
public class Singleton1 {
private static Singleton1 instance = null;
private Singleton1(){
}
public Singleton1 getInstance(){
if(instance == null){
synchronized (instance) {
instance = new Singleton1();
}
}
return instance;
}
}
JDK里面用的单例模式最常见是:java.lang.Runtime#getRuntime()