- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 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()
可能要么死锁,要么抛出异常......)
可重入锁通常使用引用计数来实现,该引用计数告诉锁定实现可重入的深度。
关于java - Java 中的可重入锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53021263/
嗨,我已经阅读了 Java 中的 ReadWriteLock,但我不确定我是否掌握了它的重入部分。这是两个仅使用一个主线程来显示重入的简短代码示例 public class Locks { p
我在使用 NotifyIcons 时发现了一个重入问题。重现它真的很容易,只需在表单上放置一个 NotiftIcon,点击事件应该如下所示: private bool reentrancyDetect
我正在尝试使用 SQLite 的新 C 接口(interface)预更新 Hook : https://www.sqlite.org/c3ref/preupdate_count.html 现在回答我的
来自阅读here我发现 Actor 是可重入的,并且我希望以下情况成立:如果我有单一类型的转换 ThespianType 但有三个特定的 Actor ThespianType (T1、T2 和 T3)
有人可以向我解释一下 BlockReentrancy 的目的是什么吗?方法在ObservableCollection ? MSDN显示以下内容作为示例: //The typical usage is
我是一名优秀的程序员,十分优秀!