【发布时间】: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的doQueries和doInsertsAndUpdates不会被执行 直到thread1完成事务?
感谢您的帮助。
【问题讨论】:
标签: android multithreading sqlite transactions greendao