Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用greendao的SQLite事务行为_Android_Multithreading_Sqlite_Transactions_Greendao - Fatal编程技术网

Android 使用greendao的SQLite事务行为

Android 使用greendao的SQLite事务行为,android,multithreading,sqlite,transactions,greendao,Android,Multithreading,Sqlite,Transactions,Greendao,我在Android项目中使用greendao作为ORM库,在理解事务行为时遇到问题 greendao提供了一个APIrunInTx(Runnable r)。 我的问题是,如何处理来自不同线程的此方法的两个调用 线程1 public void thread1() { DaoManager.INSTANCE.getDaoSession().runInTx(new Runnable() { doQueries(); doInsertsAndUpdates

我在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)是否会被阻止,因此直到thread1完成事务后,thread2的
doQueries
doInsertsAndUpdates


感谢您的帮助。

SQLiteDatabase.beginTransaction
是一个阻塞调用