在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”是否正确完成同步块?这样的设置会有什么问题吗?
1条答案
按热度按时间f87krz0w1#
从synchronized块中退出doJob函数的单个返回“A”是否正确完成synchronized块?
是的
这样的设置会有什么问题吗?
是的,你永远不会返回“B”或“C”,只有“A”或“D”,因为你要将该值返回到synchronized块,它会丢失,因为它从未被分配到任何地方或返回。
另外请注意,您不必要地使用
何处
就足够了
另外,如果没有在其他函数中共享锁,可以考虑使用
@Synchronized
,而不是手动创建锁。最后,您不需要标记函数
suspend
来使用synchronized
(或@Synchronized
)。