Android GlobalScope内的同步功能。启动(主):Kotlin

Android GlobalScope内的同步功能。启动(主):Kotlin,android,kotlin,kotlin-coroutines,Android,Kotlin,Kotlin Coroutines,场景:让乐趣A和乐趣B成为两个函数。在A内部,我们调用B。B执行时间大约需要5秒,同时其他线程再次调用A,然后我得到ConcurrentModificationException 如何同步它,以便一次一个线程可以执行B。我已经尝试使用@synchronise。由于我是kotlin的新手,请建议。问题似乎存在于fun B中,您可能在某些集合类型s.a.列表、堆栈中执行循环。。。以及删除/插入该集合类型的新元素 如果是这种情况,您应该使用迭代器循环,并且可以在迭代时删除/插入项。但如果一个线程正在循

场景:让乐趣A和乐趣B成为两个函数。在A内部,我们调用B。B执行时间大约需要5秒,同时其他线程再次调用A,然后我得到ConcurrentModificationException


如何同步它,以便一次一个线程可以执行B。我已经尝试使用@synchronise。由于我是kotlin的新手,请建议。

问题似乎存在于fun B中,您可能在某些集合类型s.a.列表、堆栈中执行循环。。。以及删除/插入该集合类型的新元素

如果是这种情况,您应该使用迭代器循环,并且可以在迭代时删除/插入项。但如果一个线程正在循环,而另一个线程正在插入/删除项目,则需要使用@Synchronized fun B等同步对该集合类型的访问

互斥锁?请参阅更好地使用参与者序列化处理。favoriteContacts和result是全局变量还是局部变量?看起来有些全局性的东西被修改了rankedEvents.favorites等。。。
fun A(){
  GlobalScope.launch(Main) {
    val result = withContext(IO) {
      B()
    }
    if (this@activity.isValid()) {
      suggestedFeedItems = result
    } else {

    }
  }
} 

fun B(){
   //some code that takes some time to execute
}