您的位置:首页 > 其它

单例

2013-11-18 17:24 267 查看
单例模式有一下特点

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例

3、单例类必须给所有其他对象提供这一实例。

它到底能带给我们什么好处呢?其实无非是三个方面的作用:

1、控制资源的使用,通过线程同步来控制资源的并发访问

2、控制实例产生的数量,有利于Java垃圾回收(garbage collection:System.gc(); Runtime.getRuntime.gc();),达到节省内存的目的。

3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

懒汉式对象延迟加载

思路:类存在时内部没有对象,只有当调用方法时才会在类中建立对象(有多懒)。

然后这个是基本懒汉式的代码:

[java] view
plaincopyprint?

class Single

{

private static Single s= null;

private Single(){}

public static Single getInstance()

{

if(s== null)

s= new Single();

return s;

}

}

下面是安全的懒汉式代码:

[java] view
plaincopyprint?

class Single

{

private static Single s= null;

private Single(){}

public static Single getInstance()

{

if(s== null)

{

synchronized(Single.class)

{

if(s== null)

{

s= new Single();

}

}

}

return s;

}

}



饿汉式

public class Singleton {
  /**jvm保证instance只被初始化一次*/
  private static final Singleton instance = new Singleton();
  /**阻止外部使用new实例化对象*/
  private Singleton(){
  }
}
区别

饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变

懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: