java - java 类中的锁

标签 java multithreading deadlock locks

假设我们有下一个示例代码:

while(some condition){
    lock1.lock();
    .
    .
}

问题是:

假设运行此代码部分的某个线程的 while 循环条件正在退出,并且 lock1 可用,该线程是否有可能检查循环条件但仍然无法获得锁?

或者在这种情况下是否保证如果检查条件,线程就会获得锁?

最佳答案

简而言之:是的,这是可能的。

如果另一个线程已经获取了锁,那么您的线程将被迫等待它释放。

请记住,您无法知道两个或多个并发执行的线程如何交错其指令执行。假设有两个线程 A 和 B 执行此代码。如果线程 A 发现条件为 true,则在实际获取锁之前(即在评估 while 条件和调用lock()),因此线程 B 也发现条件为真,获取锁,线程 A 继续等待。

关于java - java 类中的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9143284/

相关文章:

java - 如何在Java中进行多行输入

JAVA、GUI JPanel、JFrame、paintComponent、图形

java - 如何在 JavaFX 中为提示文本添加换行符?

c# - 多线程-不明白情况

vb.net - 委托(delegate)如何解决跨线程问题?

multithreading - 资源池死锁

java - Java 中 if/else 的缩写形式

java - 如果所有线程都空闲则停止工作

java - 如何在 Java 中防止这种简单的死锁?

mysql - MySQL 删除行的死锁