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,他们在多线程环境下能保证自身状态的一致性,但使用时,依然需要再外加同步锁,因为写操作可能依赖之前的状态

你可能感兴趣的:(2018-09-13 android 笔记)