2018-09-13 android 笔记

SQLiteOpenHelper

  • 管理的是一个数据库,而不是一个表
    此数据库可管理多个表,构造函数的版本号也是数据库版本号,不是表版本号哇
  • onCreate和onUpgrade何时调用:
    注意不是对象构造时,而是调用getReadableDatabase / getWriteableDatabase时,具体参考 getDatabaseLocked,其中包含onCreate和onUpgrade调用

并发概念

  • 原子性
    原子操作,指操作期间cpu不切换线程上下文
  • 可见性
    多线程下,每个子线程的有自己的数据缓存,数据改变仅发生在线程缓存空间,其它线程是看不到的,只有经过同步处理,数据才会回写到主存,并更新到其它线程的缓存中

synchronized 和 volatile

  • synchronized
    在JVM内部,为了提高效率,同时运行的每个线程都会有它正在处理的数据的缓存副本,当我们使用synchronzied进行同步的时候,真正被同步的是在不同线程中表示被锁定对象的内存块(副本数据会保持和主内存的同步,现在知道为什么要用同步这个词汇了吧),简单的说就是在同步块或同步方法执行完后,对被锁定的对象做的任何修改要在释放锁之前写回到主内存中;在进入同步块得到锁之后,被锁定对象的数据是从主内存中读出来的,持有锁的线程的数据副本一定和主内存中的数据视图是同步的

  • volatile
    volatile关键字是一种简单的同步的处理机制,因为被volatile修饰的变量遵循以下规则:

    • 变量的值在使用之前总会从主内存中再读取出来。
    • 对变量值的修改总会在完成之后写回到主内存中。

    但只有修改时不依赖当前状态(读取时的值)的变量才应该声明为volatile变量

并发数据结构

  • 并发Map
    ConcourrentMap 接口在Map接口基础上增加了3个原子操作方法
    ConcourrentHashMap 是ConcourrentMap的实现类,内部分为16块分别加锁
  • 并发集合类的使用
    并发集合类ConcourrentHashMap和CopyOnWriteArrayList,他们在多线程环境下能保证自身状态的一致性,但使用时,依然需要再外加同步锁,因为写操作可能依赖之前的状态

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 9,613评论 4 54
  • 除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供服务则是另一个更具体的并发应用场景。衡量一个服务性...
    胡二囧阅读 1,036评论 0 11
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 24,234评论 8 238
  • 语言系统,顾名思义就是听、说、理解的系统。先来说说人类的第一套语言系统:大脑一下指令,信息就从嗓子的震动发声,在经...
    0号首长阅读 65评论 0 0
  • 周六 欲乘车回 我父亲一人住的家 一个人一辆车 听一听 你家的家常 他家的理短 再看一看 车外世间 车内百态 吹着...
    诗的奴仆阅读 283评论 0 1