Kotlin同步返回到外部函数导致问题

nkkqxpd9  于 2023-05-01  发布在  Kotlin
关注(0)|答案(1)|浏览(153)

在Kotlin中考虑以下代码:

private val mLock = "lock"

suspend fun doJob(): String {

  synchronized(mLock) {

    if (someBoolean1) {
      return "A"
    }

    if (someBoolean2) {
      return@synchronized "B"
    }
    
    return@synchronized "C"
  }

  return "D"
}

synchronized块中退出doJob函数的单个返回“A”是否正确完成同步块?这样的设置会有什么问题吗?

f87krz0w

f87krz0w1#

从synchronized块中退出doJob函数的单个返回“A”是否正确完成synchronized块?
是的
这样的设置会有什么问题吗?
是的,你永远不会返回“B”或“C”,只有“A”或“D”,因为你要将该值返回到synchronized块,它会丢失,因为它从未被分配到任何地方或返回。
另外请注意,您不必要地使用

private val mLock = "lock"

何处

private val lock = Any()

就足够了
另外,如果没有在其他函数中共享锁,可以考虑使用@Synchronized,而不是手动创建锁。
最后,您不需要标记函数suspend来使用synchronized(或@Synchronized)。

相关问题