假设我们有下一个示例代码:
while(some condition){
lock1.lock();
.
.
}
问题是:
假设运行此代码部分的某个线程的 while 循环条件正在退出,并且 lock1 可用,该线程是否有可能检查循环条件但仍然无法获得锁?
或者在这种情况下是否保证如果检查条件,线程就会获得锁?
最佳答案
简而言之:是的,这是可能的。
如果另一个线程已经获取了锁,那么您的线程将被迫等待它释放。
请记住,您无法知道两个或多个并发执行的线程如何交错其指令执行。假设有两个线程 A 和 B 执行此代码。如果线程 A 发现条件为 true,则在实际获取锁之前(即在评估 while 条件和调用lock()
),因此线程 B 也发现条件为真,获取锁,线程 A 继续等待。
关于java - java 类中的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143284/