DBFlow源码分析:Transaction相关

事务

1. 封装

DBFlow对事务进行封装:Transaction

封装了什么

  1. 代码的执行
    ITransaction transaction
  2. 执行成功后的回调
    successCallback
  3. 执行失败后的回调
    errorCallback

2. 执行

代码封装好了,是为了方便的执行。
Transaction也担负着执行的职责:

3. 问题

数据库只有一个,现在有一堆增删改查相关的事务,他们的执行肯定得考虑到数据同步的问题。这得考虑到数据库的lock与synchronization的问题。

那么DBFlow如何解决这个问题呢?

队列

1.管家:manager

当你要执行事务的时候,这些事务交给了manager来管理的。

我们来细看一下这个 manager:

manager持有队列的对象,对队列进行管理。
结构如下:


2. DefaultTransactionQueue

单独开一个线程去处理这个队列。

  1. queue这个线程持有:LinkedBlockingQueue<Transaction> queue;
  2. 管理这个queue



    注意:queue.take()--》取出并且移除队列的首个元素,若无元素,则会一直等待。此时,线程则阻塞了。

  3. 对外暴露了几个方法:



    向队列中添加,移除某个事务。启动,退出这个线程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,823评论 1 17
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,558评论 11 349
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 5,351评论 0 6
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 5,819评论 0 17
  • 目录 一、基本概念1.多线程2.串行和并行, 并发3.队列与任务4.同步与异步5.线程状态6.多线程方案 二、GC...
    BohrIsLay阅读 5,550评论 5 12

友情链接更多精彩内容