您的位置:首页 > 其它

单例设计模式

2016-05-29 04:31 351 查看
使用单例的好处是保证在Java应用程序中,一个类Class只有一个实例存在。 使用单例的好处在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收.

单例模式下面又分两种实现形式:懒汉式,饿汉式

1.饿汉式

//饿汉式,确保内存中只存在唯一实例
public class Hungry{
//构造私有化
private Hungry(){

}
//实例化对象本身
private static Hungry hungry = new Hungry();

//增加获取实例的方法,该方法必须为静态
public static Hungry getInstance(){
return hungry;
}
}2.普通懒汉式
//懒汉式
public class Sluggard {
//构造私有化
private Sluggard(){

}
private static Sluggard sluggard = null;

//获取实例的方法,为了防止方法被同时访问,必须给该方法加锁
public static synchronized Sluggard getInstance(){
if(sluggard == null){
sluggard = new Sluggard();
}
return sluggard;
}
}

上面两段带码已经体现了单例模式的核心,但是第二中有个缺点:synchronized 比较占用系统资源,当多人同时想获得实例的时候可能会出现频繁的锁竞争从而消耗较多的系统资源,下面加以改进
//改进懒汉式
public class Sluggard {
//构造私有化
private Sluggard(){

}
private static Sluggard sluggard = null;

//获取实例的方法,为了防止方法被同时访问,必须给该方法加锁
public static Sluggard getInstance(){
if(sluggard == null){
//减小锁粒度
synchronized(Sluggard.class){
if(sluggard == null){
sluggard = new Sluggard();
}
}

}

return sluggard;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: