【问题标题】:Synchronize threads in Android在 Android 中同步线程
【发布时间】:2021-06-27 23:26:55
【问题描述】:

在这种情况下同步线程的最佳方法是什么:

fun doSomething() {

     readFromDB.subscribe(object : DisposableMaybeObserver<List<Trip>>()) {
         override onSuccess() {
             callback.complete()
         }
         override onFailure() {
             callback.complete()
         }
     }
} 

两个线程访问此块并遇到竞争条件。 我只需要一个线程从 DB 中读取并保持该状态,直到回调完成。 如何锁定其他线程不执行此块。

尝试使用锁/同步。但是,如何从onSuccessonFailure 中解锁。不能解决问题。

换句话说,如何等待线程从 DB 读取并返回 onSuccess / onFailure,以便第二个线程执行相同操作。

【问题讨论】:

  • 2 个线程共享callback 实例,对吧?
  • 在这种情况下,您不必同步线程,它是应该同步的第 4 个数据库方法。
  • @dung ya van:回调实例是共享的。
  • @ADM :需要对来自数据库的结果进行一些处理,并且在第一个线程完全完成处理之前,第二个线程不应访问 doSomething()。跨度>

标签: android multithreading kotlin rx-java


【解决方案1】:

您可以将观察限制在单线程调度程序中。通常,需要在主线程上运行完成代码:

readFromDB
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : DisposableMaybeObserver<List<Trip>>()) {
    override onSuccess() {
        callback.complete()
    }
    override onFailure() {
        callback.complete()
    }
}

如果目标线程无关紧要,也可以使用Schedulers.single()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2015-09-23
    • 2015-08-13
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多