SQLite多线程并发操作

SQLite多线程并发操作

  • 先理清楚一个概念 多线程操作多数据库连接操作是不同的概念

  • 多线程操作:多线程操作数据库时可以使用一个数据库连接,也可以每个线程使用各自的数据库连接

  • 多数据库连接操作:即每个数据库操作使用的是各自的数据库连接

  • SQLite默认情况下只支持单个数据库连接操作,多连接并发操作时会出问题,需要开启wal模式才能进行多项城并发读操作,写操作仍能不可以并发。

如何理解?
  • SQLite数据库仍能是一个文件,没有锁机制并发写操作是有问题的,所以最多只能实现并发读操作。
两种解决方案
  • 1、多线程读,多线程写,只使用共同一个数据库连接,即使用同一个SQLiteHelper连接
  • 这种情况下由于使用的是同一个数据库连接,SQLite内部有锁机制,不会出现异常。这种多线程操作并不是真正的并发操作,由于锁机制的存在所以仍能是阻塞的。
  • 2、多线程读,单线程写,每个线程使用各自独立的数据库连接,但是需要开启wal模式,以开启数据库连接池
  • 这种情况下是真的实现了多线程并发读操作,但是写操作仍能只可以单线程,如果多线程写(每个线程使用各自的数据库连接)就会出现问题。
两种方案对比
  • 读操作效率上没有什么差别,在读取操作上,理论上并发操作越多方案2效率越高。在实际测试情况下100个线程并发读取,每个线程读取50次,方案一的用时是方案二的2倍多。
关于方案一的具体实现,有两种方式
如何开启wal模式?
  • SQLiteDatabase.enableWriteAheadLogging();
测试代码:https://github.com/alantaorenjie/SQLiteTest.git
参考链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值