领域在后台线程上处理两个事务

时间:2018-06-20 14:50:02

标签: android realm

我有大量数据,需要对其进行一些优化。后台线程如下所示:

Realm realm;
try{
 realm = Realm.getDefaultInstance();
 realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
           //delete some data from table A according to algorithm
        }
    });
} finally {
        if (realm != null) {
            realm.close();
        }
}

同时,如果用户决定删除整个表A,则可以在优化完成之前删除该表A,这将启动另一个后台线程,就像上面的删除整个表A的线程一样。

我想知道会发生什么,如果一项交易在另一项交易之前完成,我是否需要确保这些交易中只有一项在给定时间发生?

提前谢谢。...

3 个答案:

答案 0 :(得分:1)

这是默认行为。一次只会发生一个事务。当您处于一个事务中时,它将被阻塞,并且没有其他线程可以执行其他事务。

基本上,您已处于事务中,因此无法启动多个事务。它将引发异常Check this Link

答案 1 :(得分:0)

第一笔交易将导致第二笔交易被阻塞,直到第一笔交易被提交或取消。

写入事务阻塞了线程和进程。

答案 2 :(得分:0)

尝试使用 executeTransactionAsync 而不是 executeTransaction ,该过程将在后台线程中处理。不必担心交易结束,请为我们管理领域