【问题标题】:SQLite transaction behaviour using greendao使用 greendao 的 SQLite 事务行为
【发布时间】:2015-03-24 07:29:16
【问题描述】:

我在我的 Android 项目中使用 greendao 作为 ORM 库,但无法理解事务的行为。

greendao 提供 API runInTx(Runnable r) 。 我的问题是,如何处理来自不同线程的此方法的两次调用?

线程 1

public void thread1() {
    DaoManager.INSTANCE.getDaoSession().runInTx(new Runnable()
    {
        doQueries();
        doInsertsAndUpdates();
    }
}

线程 2

public void thread2() {
      DaoManager.INSTANCE.getDaoSession().runInTx(new Runnable()
    {
        doQueries();
        doInsertsAndUpdates();
    }
} 

我已经看到,runInTx 以独占模式调用SQLiteDatabase.beginTransaction,因此当此事务打开时,没有其他线程可以读取/写入数据库。 但我想不通的是,当thread1正在做他的工作(即doQueries)时,另一个线程(即thread2)会被阻塞,所以thread2的doQueriesdoInsertsAndUpdates不会被执行 直到thread1完成事务?

感谢您的帮助。

【问题讨论】:

    标签: android multithreading sqlite transactions greendao


    【解决方案1】:

    SQLiteDatabase.beginTransaction 是一个阻塞调用。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多