单例

单例模式有一下特点

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

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

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

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

1、控制资源的使用,通过线程同步来控制资源的并发访问。     
2、控制实例产生的数量,有利于Java垃圾回收(garbage collection:System.gc(); Runtime.getRuntime.gc();),达到节省内存的目的。       
3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。 

懒汉式对象延迟加载

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


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

[java]  view plain copy print ?
  1. class Single  
  2. {  
  3.     private static Single s= null;  
  4.       
  5.     private Single(){}  
  6.   
  7.     public static Single getInstance()  
  8.     {  
  9.         if(s== null)  
  10.             s= new Single();  
  11.           
  12.         return s;     
  13.     }  
  14. }  

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

[java]  view plain copy print ?
  1. class Single  
  2. {  
  3.     private static Single s= null;  
  4.       
  5.     private Single(){}  
  6.   
  7.     public static Single getInstance()  
  8.     {  
  9.         if(s== null)  
  10.         {  
  11.             synchronized(Single.class)  
  12.             {  
  13.                 if(s== null)  
  14.                 {  
  15.                     s= new Single();  
  16.                 }  
  17.             }   
  18.         }  
  19.         return s;     
  20.     }  
  21. }  


饿汉式

public class Singleton {

  /**jvm保证instance只被初始化一次*/

  private static final Singleton instance = new Singleton();

  /**阻止外部使用new实例化对象*/

  private Singleton(){

  }

}

区别

  饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
   懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值