当前位置:   article > 正文

android设计模式-单例模式

android设计模式-单例模式


转:https://www.jianshu.com/p/9c32aea34b6d

单例模式是运用最广泛的设计模式之一,在应用这个模式时,单例模式的类必须保证只有一个实例存在。多用于整个程序只需要有一个实例,通常很消耗资源的类,比如线程池,缓存,网络请求,IO操作,访问数据库等。由于类比较耗资源,所以没必要让它构造多个实例,这种就是单例模式比较好的使用场景。确保一个类只有一个实例,并且自行实例化。向整个系统提供这个唯一的实例

几个关键点:

1.构造函数用private,让外部无法访问,就没办法去重写实例化

2.使用最关键的关键词static,针对他的特性,内存中只有一份数据。

如:

  1. public class SingletionStarving {
  2. private static final SingletionStarving mInstance = new SingletionStarving();
  3. private SingletionStarving() {
  4. }
  5. public static SingletionStarving getInstance() {
  6. return mInstance;
  7. }
  8. }

实用的写法:

  1. public class SingletionDLC {
  2. private volatile static SingletionDLC mInstance;
  3. private SingletionDLC() {}
  4. public static SingletionDLC getmInstance() {
  5. if (mInstance == null) {
  6. synchronized (SingletionDLC.class) {
  7. if (mInstance == null) {
  8. mInstance = new SingletionDLC();
  9. }
  10. }
  11. }
  12. return mInstance;
  13. }
  14. }

1、构造函数用private修饰,外部无法访问
2、使用的时候即调用getInstance的时候才初始化
3、static关键字修饰,静态变量,存储在内存中,只有一份数据
4、synchronized线程安全,多线程情况下单例的唯一性
5、两次判断空,避免多次同步(synchronized)

synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。

volatile 说白了就是被修饰的变量会被不同的线程访问和修改,也是一个轻量级的同步机制

可见性:当某一个线程对共享变量的修改,其他线程可以立刻看到修改之后的值

防止编译器优化:编译器在优化代码时会尝试将变量的访问操作优化为更高效的方式,例如将变量的值缓存在寄存器中。然而,对于某些特殊的变量,如多线程环境下的共享变量、中断处理中的标志位、硬件寄存器等,这种优化可能会导致意外的行为。使用 volatile 关键字可以告诉编译器不要对该变量进行优化,确保每次访问都从内存中读取或写入。

处理多线程共享变量:在多线程编程中,当一个变量被多个线程共享并且可能被一个线程修改时,需要使用 volatile 关键字来确保线程之间的可见性。这样可以防止编译器对共享变量的优化,确保每个线程都能正确地读取到最新的值。

处理中断和硬件寄存器:在中断处理程序中,某些变量可能由硬件直接修改,而不是通过常规的变量赋值操作。在这种情况下,使用 volatile 关键字可以确保编译器不会对这些变量的访问进行优化,以避免出现不一致的行为。

内部类的方式,也推荐使用

  1. public class SingletionInternalClass {
  2. private SingletionInternalClass() {}
  3. public static SingletionInternalClass getInstance() {
  4. return SingletionInternalClassHolder.instance;
  5. }
  6. private static class SingletionInternalClassHolder {
  7. private static final SingletionInternalClass instance = new SingletionInternalClass();
  8. }
  9. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/593868
推荐阅读
相关标签
  

闽ICP备14008679号