您的位置:首页 > 编程语言 > Java开发

java 单例模式(Singleton)

2016-02-17 11:48 621 查看
确保某个对象在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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息