使用 greendao 的 SQLite 事务行为

SQLite transaction behaviour using greendao

我在我的 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,因此当此事务打开时,没有其他线程可以 read/write 访问数据库。 但我无法弄清楚的是,当线程 1 正在做他的工作(即 doQueries)时,另一个线程(即线程 2)是否会被阻塞,所以 doQueriesdoInsertsAndUpdates在线程 1 完成事务之前,线程 2 不会执行

感谢您的帮助。

SQLiteDatabase.beginTransaction 是阻塞调用。