线程安全的单例模式
单位模式一般写法如下:

public static FestivalLab mInstance;
private FestivalLab() {
}
public static FestivalLab getInstance() {if (mInstance == null) {mInstance = new FestivalLab();}return mInstance;
}

这样写不是线程安全的,因为如果两个线程都进入到这里,会实例化两次。那么如何优化呢?

线程安全的单例模式:

public static FestivalLab mInstance;
private FestivalLab() {
}
public static FestivalLab getInstance() {if (mInstance == null) {synchronized (FestivalLab.class) {if (mInstance == null) {mInstance = new FestivalLab();}}}return mInstance;
}

这里用 synchronized 来进行锁定,同一时间只让一个线程进行实例化操作。

Adapter注意事项之引用传值
Adapter中经常会用到集合数据,先在Activity中获取集合数据,然后传给Adapter中构造适配器。
这里有一个特别需要注意的地方,就是java中集合数据是引用的方式传递的,如果在传给Adapter时数据不进行复制,在Activity中改变了集合数据(本意并不想改变Adapter中的数据),Adapter中的数据源也发生了变化,导致意想不到的错误(如索引越界)。

如果是这种情况,就要进行数据复制,示例如下:

private List<Festival> mFestivals = new ArrayList<>();
mFestivals.add(...);
public List<Festival> getFestivals() {return new ArrayList<>(mFestivals);
}

转载于:https://www.cnblogs.com/lurenjiashuo/p/android-thread-safe-singleton-pattern.html

Android之线程安全的单例模式,Adapter注意事项之引用传值相关推荐

  1. C++实现线程安全的单例模式

    C++实现线程安全的单例模式 1.单例模式 一个简单的单例模式很容易实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实 ...

  2. android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...

    我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...

  3. android单例模式代码,设计模式(一):Android 源码中的单例模式

    设计模式(一):Android 源码中的单例模式 2020-08-17 22:51 阅读数 57 <>什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的 ...

  4. 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask

    方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...

  5. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...

    http://cantellow.iteye.com/blog/838473 http://meizhi.iteye.com/blog/537563 第一种(懒汉,线程不安全): Java代码  pu ...

  6. android 异步线程的使用

    //从项目中取出的,android 异步线程的使用,去执行上传百度云图片, public class MyThreadsAddMember extends AsyncTask<Integer, ...

  7. android异步线程利用Handler将消息发送至UI线程

    android UI线程安全 首先对于android而言,UI线程就是我们的主线程,在Android应用启动时,会自动创建一个线程,主线程负责UI的展示.UI事件消息的派发处理等等,因此主线程也叫做U ...

  8. Android UI线程和非UI线程

    UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...

  9. android 打印线程信息

    今天,讲讲如何打印线程的id. 用语句: Android.os.Process     //获取当前进程的方法     android.os.Process.getElapsedCpuTime():获 ...

最新文章

  1. “后 PC”时代,应用为王
  2. mysql monday event_MySQL获取日期周、月、天,生成序号
  3. 编程的智慧 意外在内网找到的资源
  4. SQLite大批量插入性能优化
  5. WinSCP实现Ubuntu与 Windows 文件共享方法
  6. Largevis算法
  7. 和华为云一起做件“伟大的事”,24万奖金等你来!
  8. Linux下高速缓存DNS的配置
  9. python如何使数据加行_如何使用 Python 插入行
  10. 杭电acm2028 Lowest Common Multiple Plus
  11. dos如何运行java_怎么用DOS命令运行java程序
  12. 达梦数据库角色、用户管理
  13. 动态网站加速,cdn义不容辞
  14. 语音变声器微信小程序源码/支持多种音效变声器小程序源码
  15. 【数学】一元函数积分学(宇哥笔记)
  16. 上层应用程序是如何访问到底层驱动程序的呢?
  17. XCTF-PWN welpwn
  18. 人工智能 2. 图像识别
  19. Xilinx原语的用法
  20. Android中使用通知

热门文章

  1. 常见字符串拼接性能比较
  2. 手把手教你走进Hyperledger Fabric
  3. 容器云之K8s自动化安装方式的选择
  4. html锚点(mao dian)--特殊的超链接
  5. Generalized Linear Models
  6. 使用 LocalReport 对象进行打印
  7. 机器手臂(3):机械手臂底座
  8. Windows下curl使用
  9. PHP实现将任意尺寸的图片裁剪后等比缩放到任意尺寸的透明图片上,并实现图片翻转...
  10. 1136 A Delayed Palindrome