多线程如何并发访问SQLite数据库?

NodeLance 2016-07-20 06:01:48
我在网上搜了一下相关的资料,发现了一种解决方法:
http://www.tuicool.com/articles/vm6Bra
里面同时使用了synchronized关键字和AtomicInteger,这里为什么不能直接使用int类型进行引用计数?getDatabase和close方法执行时加的都是同一个锁,synchronized应该能够保证这两个方法各自执行时的原子性,其中一个方法正在执行时,另外一条线程想执行另外一个方法时应该会被阻塞,并且也能够保证int类型变量的内存可见,为什么还要用AtomicInteger类型变量?
...全文
778 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-07-21
  • 打赏
  • 举报
回复
一般来讲,用了synchronized就不需要再用AtomicInteger了 那个代码里有很多问题,不能细看 1.先getReadableDatabase()再getWritableDatabase() 往一个只读的数据库里写入数据,要出异常的吧 2.多个线程,各自getWritableDatabase(),虽然get实例这个过程是同步的,但是分别操作数据还是有可能会有线程冲突的 需要同步的不仅是获取实例这个过程,还应该包括数据操作的过程 最好是用读写锁来实现,多个线程的读取操作可以并发,读写、写写之间是互斥的
peter_nj_RD 2016-07-21
  • 打赏
  • 举报
回复
这里为什么不能直接使用int类型进行引用计数? 这是跟SQLite的兼容性有关的,可以使用INTEGER类型替代 sqlite所支持的数据类型 http://blog.csdn.net/naturebe/article/details/6981843

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧