gpt4 book ai didi

java - Java 中的可重入锁

转载 作者:行者123 更新时间:2023-11-30 06:03:09 25 4
gpt4 key购买 nike

我正在研究 Java 中的可重入锁定。需要对这个概念进行一定的澄清,了解它实际上是如何工作的。我对以下代码段的理解:

class Test{
public synchronized a(){
some code;
b();
some code;
}
public synchronized b(){
some code;
}

}

上面的代码有这种可重入锁问题的场景。

我在这里的理解是,假设我们有两个线程:在测试共享对象上执行的应用程序中的 T1 和 T2。

无论 T1 还是 T2 都获得了 a() 和 b() 上的锁。先说 T1 并执行 a()。当 a() 控制的执行到达 b() 时;称呼。现在在那种情况下,T1 期待这个 b() 的新锁,或者因为它已经锁定了 b(),所以锁定被跳过。

需要帮助详细解释此行为以及上述代码中的问题。此外,可重入锁定机制将如何在此处提供帮助以及对此的片段和详细解释。

最佳答案

可重入锁是一种允许线程在已经持有锁的情况下再次(多次)获取锁的锁。

例如,如果线程 T1 在对象上调用 a(),则 a() 方法获取对象上的锁,并开始执行 body 。当a 的主体调用b() 时,b() 调用“可重入”获取相同的锁。当 b() 调用返回时,a() 调用仍然持有锁。只有当 a() 调用返回时才会释放锁。

(假设,如果 Java 原始锁不可重入,那么序列 T1 调用 a(),然后调用 b()可能要么死锁,要么抛出异常......)

可重入锁通常使用引用计数来实现,该引用计数告诉锁定实现可重入的深度。

另请参阅:https://stackoverflow.com/a/16504266/139985

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

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