https://www.jianshu.com/p/1b804426d212
https://www.jianshu.com/p/5c0e1768ba54
http://www.jianshu.com/p/d60ee3c85d63
1,volatile
它所修饰的变量不保留拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。 一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。
https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247483698&idx=1&sn=2cc8da03472d6c2a796312bf04680058&chksm=ebd63e1edca1b7084fdbb118570445aab00ad7a079c261c6c5d5088a6cefb4cb2748cc2474b4&scene=0#rd
FMDB
FMDatabase 这个类是线程不安全的,在多线程中使用 FMDatabase 单例是极其错误的想法。不能在多线程的环境中对数据库 FMDatabase 进行读写,会出现奔溃或者异常,因为你不能保证你读数据的同时另外一条线程不在写数据。
因此不要实例化一个 FMDatabase 单例来跨线程使用。
相反,使用 FMDatabaseQueue,FMDatabaseQueue 跨线程使用是同步的,下面是它的使用方法: