在Android中使用Room数据库进行多线程处理

时间:2018-07-20 06:20:05

标签: android sqlite android-room

最近我开始在Android应用中使用Room数据库。尝试从多个线程访问数据库时遇到一些问题。我在所有线程中都使用相同的数据库实例。

  1. 据我所知,如果所有线程都具有相同的数据库实例,那么 数据库访问已序列化。我读了一个blog 模式下,只有一个线程可以在数据库中读写。然而 根据{{​​3}}文档,read启用共享锁,因此多个 线程可以同时读取。因此,当使用db的单个实例时, sqlite的默认锁定标准,该标准允许多次读取和 是否执行一次写操作?
  2. 根据sqlite文档,在写入数据库时​​,启用了第一个保留锁,并且是否有其他写入操作尝试获取 保留锁然后写入尝试失败,并且db返回SQLITE_BUSY。 但是如果我试图从中运行两个写操作 不同的线程,我永远不会收到此错误。这是否意味着 写操作排队,并保证我们永远不会 出现SQLITE_BUSY错误,因此写操作将永远不会失败?
  3. 我正在一个线程(Thread1)中执行长插入操作(@Insert),并在另一个线程(Thread2)中读取数据库。如果 我在Thread1之后立即启动Thread2,读取操作不会返回新的 已在Thread1中插入数据,因此在插入之前正在进行读取。 发生这种情况是因为最初的写入启用了保留锁并且 在这段时间内,可以@@ sqlite获取新的共享锁。

很长的问题很抱歉。

0 个答案:

没有答案