SQLite多线程并发操作
SQLite多线程并发操作
先理清楚一个概念 多线程操作和多数据库连接操作是不同的概念
多线程操作:多线程操作数据库时可以使用一个数据库连接,也可以每个线程使用各自的数据库连接
多数据库连接操作:即每个数据库操作使用的是各自的数据库连接
SQLite默认情况下只支持单个数据库连接操作,多连接并发操作时会出问题,需要开启wal模式才能进行多项城并发读操作,写操作仍能不可以并发。
如何理解?
- SQLite数据库仍能是一个文件,没有锁机制并发写操作是有问题的,所以最多只能实现并发读操作。
两种解决方案
- 1、多线程读,多线程写,只使用共同一个数据库连接,即使用同一个SQLiteHelper连接
- 这种情况下由于使用的是同一个数据库连接,SQLite内部有锁机制,不会出现异常。这种多线程操作并不是真正的并发操作,由于锁机制的存在所以仍能是阻塞的。
- 2、多线程读,单线程写,每个线程使用各自独立的数据库连接,但是需要开启wal模式,以开启数据库连接池
- 这种情况下是真的实现了多线程并发读操作,但是写操作仍能只可以单线程,如果多线程写(每个线程使用各自的数据库连接)就会出现问题。
两种方案对比
- 读操作效率上没有什么差别,在读取操作上,理论上并发操作越多方案2效率越高。在实际测试情况下100个线程并发读取,每个线程读取50次,方案一的用时是方案二的2倍多。
关于方案一的具体实现,有两种方式
- 1、开启一个数据库连接永不关闭,也是so上的大神推荐的做法
- 2、自己写一个管理类,具体实现见:android Sqlite多线程访问异常解决方案
如何开启wal模式?
- SQLiteDatabase.enableWriteAheadLogging();
测试代码:https://github.com/alantaorenjie/SQLiteTest.git
参考链接
- android 多线程数据库读写分析与优化
- Android使用SQLITE3 WAL模式
SQLite多线程并发操作相关推荐
- MYSQL多线程并发操作同一张表同一个字段的更新问题
MYSQL多线程并发操作同一张表同一个字段的更新问题? 可以用乐观锁方案: 在表里增加个字段,版本号字段 每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本 ...
- java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...
C#解决SQlite并发异常问题的方法(使用读写锁) 本文实例讲述了C#解决SQlite并发异常问题的方法.分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLI ...
- java sqlite 多线程并发_sqlite之多线程总结
12.android 多线程数据库读写分析与优化 11.多线程操作Sqlite? ==== 最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWr ...
- java 多线程全局变量_JAVA多线程并发操作全局变量
现在我有一个需求: 用户想发起一个请求,用户必须输入一个Licence Key,然后查看有没有权限访问,并且返回可用数量,然后后台有很多的线程会操作这个变量. 我本来是准备把这个变量存储在表中,根据用 ...
- java sqlite 多线程并发_Android中Sqlite数据库多线程并发问题
最近在做一个Android项目, 为了改善用户体验,把原先必须让用户"等待"的过程改成在新线程中异步执行.但是这样做遇到了多个线程同时需要写Sqlite数据库,导致操作数据库失败. ...
- java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- java的知识点32——多线程 并发同步的 性能分析、快乐影院 订票操作
多线程 并发 同步 性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...
- Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题
Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题 多线程操作数据库,为处理并发问题,大家第一想到的是加锁操作 ,SQLite是文件级别的锁.SQLite3对于并发的处理机制是允 ...
最新文章
- MindSpore Lite整体架构介绍
- index.html安全文件,restorecon - 恢复文件的安全上下文
- 如何测试一个空的JavaScript对象?
- Windows窗体编程(二)
- Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate
- java8的stream特性_Java8新特性介绍:Stream API
- mysql常见函数的实列
- (dp)openjudge 复杂的整数划分问题
- 渗透测试-主动信息收集(3)
- vue3 effect
- 仿真软件proteus构建流水灯实验
- JAVA算法(四平方和)
- Harbor项目高手问答及赠书活动火热进行中
- android 后台自动拍照,怎么实现后台拍照功能,求解
- 关于 麒麟系统启动应用报错“undefined symbol: __cxa_throw_bad_array_new_length, version Qt_5“ 的解决方法
- linux服务器好管理吗,给初学者Linux服务器管理建议
- Mac如何通过bootcamp(启动转换助理)安装Windows10系统?附教程和下载
- usart串口发送与接收问题
- 中南大学计算机科学与技术课程,中南大学计算机科学与技术专业本科培养方案.doc...
- 人工智能有多吃香?人工智能岗位薪资水平曝光(附赠37G学习资料大礼包)
热门文章
- 卡片式记忆工具:Studies Mac版
- netbsd源码分析(1)
- vue 幻灯片组件_带有vue的漂亮幻灯片组件
- IDEA打包jar,java运行main函数
- Mit6.006-problemSession04
- c语言程序设计何钦铭视频教程,C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第1章 教案.ppt...
- python3中urlopen_python3 urlopen打开包含中文的url
- 电子协会 C语言 3级 50 、猴子吃桃
- 鸿蒙安卓8,安卓VS鸿蒙第三方件切换宝典 V2.0(第一部分)
- 23种设计模式-工厂模式