sqliteDataBase 到底是不是线程安全的
2015-12-14 17:31
246 查看
数据库操作实际上就是操作数据库文件。
在android 2.3.7之前,insertWithOnConflict方法里,在获取sqliteStatement的执行数据库的代码块前后有lock() .... finally{... unlock()},所以对同一个DataBase,就做到了不同线程间的互斥;
在abdroid 4.0以上,源码去掉了lock(), 对于同一个DataBase,每个线程执行一个操作都会new 一个sqlitestatement,每个线程都持有唯一一个sqliteSession,并且一个session也只属于一个线程,这样保证了事务并发。每个线程在dataBase这一层中都是异步的,最终在native层访做的同步控制
在android 2.3.7之前,insertWithOnConflict方法里,在获取sqliteStatement的执行数据库的代码块前后有lock() .... finally{... unlock()},所以对同一个DataBase,就做到了不同线程间的互斥;
在abdroid 4.0以上,源码去掉了lock(), 对于同一个DataBase,每个线程执行一个操作都会new 一个sqlitestatement,每个线程都持有唯一一个sqliteSession,并且一个session也只属于一个线程,这样保证了事务并发。每个线程在dataBase这一层中都是异步的,最终在native层访做的同步控制
相关文章推荐
- mysql 分库分表
- My SQL load data infile 遇到的问题总结
- Redis中集合类型Set
- SQL笔记(12)_第十二章 日期与时间
- AAA redis使用手册后 小结
- 关于数据库的相关操作
- 客户数据库管理软件有什么用?
- sql语句中的 inner join 、 left join 、 right join、 full join 的区别
- redis集群(主从配置)
- T-SQL查询进阶--深入理解子查询
- Oracle中的join
- Oracle 表空间迁移
- MFC使用ADO连接SQL Server
- MySQL数据库中的大小写敏感性
- PostgreSQL Obtaining the Result Status
- 快速破解本地的mysql用户名和密码
- IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库
- mysql主从切换步骤
- MySQL5.6 ALTER TABLE 分析和测试
- ORACLE多表关联UPDATE 语句