两者之间是否有区别(偏好除外)

someLock.withLock {
    sharedResource.operation()
}


synchronized(someLock) {
    sharedResource.operation()
}

在 Kotlin ?

最佳答案

扩展withLock适用于Lock实例(例如ReentrantLock),而synchronized可以与任何对象一起使用。

val lock = ReentrantLock()
fun syncWithLockTest(): Int = lock.withLock { 123 }

val anyLock = Any()
fun syncWithArbitraryObjTest(): Int = synchronized(anyLock) { 123 }


请注意synchronized是Kotlin中的一个函数,它返回一个值。这使其比Java的synced关键字更强大。
从技术上讲,只要您将相同的对象用于所有需要彼此同步且不公开公开的相关代码块,就不会锁定哪个对象。

关于kotlin - Lock.withLock和Kotlin中同步的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47721854/

10-10 07:10