Android 中的单例

单例的价值所在:

当一个程序中有比较大的或者消耗内存的存在,这时候你就希望只是出现一个实例。

在移动开发中用到的话比较好保持程序运行的时候该中始终只有一个实例存在内存中


public class Singleton { 

private static volatile Singleton instance = null;  

private Singleton(){ }  

public static Singleton getInstance() {  

if (instance == null) {  

synchronized (Singleton.class) {  

if (instance == null) {  

instance = new Singleton();  

}  

}  

}  

return instance;  

}

}

必须防止外部可以调用构造函数进行实例化,因此构造函数必须私有化


必须定义一个静态函数获得该单例


单例使用volatile修饰


使用synchronized 进行同步处理,并且双重判断是否为null,我们看到synchronized (Singleton.class)里面又进行了是否为null的判断,这是因为一个线程进入了该代码,如果另一个线程在等待,这时候前一个线程创建了一个实例出来完毕后,另一个线程获得锁进入该同步代码,实例已经存在,没必要再次创建,因此这个判断是否是null还是必须的。


还有 饿汉式 和 懒汉式


单例模式:懒汉式和饿汉式
   饿汉式:线程安全:构造方法私有化:推荐使用

         public class Singleton{
           private static Singleton singleton = new Singleton ();//类创建时,就创建一个静态对象,之后不会再改变
            private Singleton (){}
            public Singleton getInstance(){return singletion;}
       } 


 懒汉式:线程不安全:若生成实例的时候若不加synchronized(线程同步),会发生线程不安全:如:当一个线程执                  行到(2)时,还未生成对象,另一个线程执行(1);这时就会发生线程不安全
       public class Singleton{
            private static Singleton singleton = null;
            public static  synchronized getInstance(){
                 if(singleton==null){//(1)
                       //(2)
                     singleton = new Singleton();//(3)
                 }
                return singleton;
            }
       } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值