Android SQLite:从多个线程锁定+访问

时间:2012-02-19 15:43:07

标签: android sqlite concurrency locking

我正在尝试了解在多个线程可以在DB上工作时使用SQLite的可能方法。 根据stackoverflow和其他站点中的各种响应,当从多个线程使用相同的sqlitehelper实例时,似乎会出现锁定问题。在一个典型的Java应用程序中,我希望实例意味着sqlite helper类型的单个对象将被不同的应用程序线程使用。在这种情况下,我认为锁是正确使用synchronized块的问题。 [在这里纠正我,因为我不习惯这种查看sqliethelper实例的方式]

我关心的是共享相同的数据库:当一个实例化不同线程中的sqlite帮助程序[即每个线程都有自己的对象实例]但是在同一个数据库上工作时[我想这更像是拥有相同的数据库实例]。 在这种情况下,我经常遇到数据库锁定错误。即使线程正在处理不同的数据库表,也会发生这种情况。

在我的应用程序数据库中,可以通过应用程序的用户交互或通过服务器[定期同步]获取数据来更新。有些时候,当同步过程和用户​​活动重叠时,我会遇到锁定问题。由于这种数据处理模式似乎在与服务器同步的应用程序中很常见,因此想知道如何处理因并发而导致的锁定问题。

我想理解这一点,因为如果必然会发生这种情况,那么可能只需要在数据库上创建一个处理程序并在其上实现队列以避免锁定。但这意味着完整的应用程序需要知道数据库可能不会立即更新,他们需要实现监听器以了解数据何时在数据库中实际更新。

感谢 普拉迪普

1 个答案:

答案 0 :(得分:0)

据我所知,sqlite适用于single process usage。无论你总是需要从一个线程一次访问数据库。您可以从多个客户端中进行选择,但一次只能从一个客户端进行选择。其他读者和作家也会在平均时间内锁定。

作为旁注 - 数据库访问几乎不可能被视为即时。