gpt4 book ai didi

java - 将 synchronized() 与 ReentrantLock.lock() 混合使用

转载 作者:太空狗 更新时间:2023-10-29 22:53:29 25 4
gpt4 key购买 nike

在Java中,ReentrantLock.lock()ReetrantLock.unlock()是否使用与synchronized()相同的锁定机制?

我的猜测是“不”,但我希望是错误的。

例子:

假设线程 1 和线程 2 都可以访问:

ReentrantLock lock = new ReentrantLock();

线程 1 运行:

synchronized (lock) {
// blah
}

线程 2 运行:

lock.lock();
try {
// blah
}
finally {
lock.unlock();
}

假设线程 1 先到达它的部分,然后在线程 1 完成之前线程 2:线程 2 会等待线程 1 离开 synchronized() block ,还是会继续运行?

最佳答案

不,线程 2 可以 lock() 即使线程 1 在同一 lock同步。这就是documentation不得不说:

Note that Lock instances are just normal objects and can themselves be used as the target in a synchronized statement. Acquiring the monitor lock of a Lock instance has no specified relationship with invoking any of the lock() methods of that instance. It is recommended that to avoid confusion you never use Lock instances in this way, except within their own implementation.

关于java - 将 synchronized() 与 ReentrantLock.lock() 混合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com