Sqlite死锁问题

时间:2014-10-15 14:15:58

标签: android multithreading sqlite

从Web服务收到的响应我正在后台线程中将其写入数据库。 同时我正在执行其他数据库操作,因为该应用程序面临死锁,如here所述。 如链接中所述,有两种可能的方法

  • 不要让编写器线程加入读者线程。如上所述here我试图以这样的方式使用java线程,即在执行数据库操作时不应发生死锁。我已经使用了synchronized块来实现这一点,但它没有帮助。

  • 我没有使用第二种方法,因为它可能会丢失数据。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是因为我通过我的应用程序使用相同的数据库对象。 虽然我使用synchronized方法来访问数据库并执行数据库操作,但数据库对象是相同的。

假设我有三个同步的方法getdatabase()writedb()readdb(),它们返回数据库对象,写入数据库并分别从数据库中读取。 我有两个线程T1和T2。

  1. 在帖子T1中致电getdabase()
  2. 使用线程T1开始写入数据库。
  3. 使用线程T2调用getdabase()(由于T1未使用此方法,因此将访问访问权限)
  4. 使用线程T2调用readdb()。 --Deadlock
  5. 为避免此问题,我使用了Application变量(Application类中的静态变量),只有在没有其他线程使用数据库时才会授予对数据库的访问权。