将锁定计数设置为大于1的值

时间:2017-10-23 10:22:58

标签: java multithreading concurrency locking

我正在阅读内在锁的重入性,并发现了我无法理解的陈述:

  

如果同一线程再次获得锁定,则计数递增,并且当拥有线程退出同步块时,计数递减。当计数达到零时,锁定被释放。

当线程已经锁定(计数已设置为1)时递增计数的目的是什么?除了锁定实现之外,这还会影响其他方面吗?

以下示例在父方法中给出了等于2的计数。我是对的吗?

class A {
    void a() {
        synchronized (this) {
            // 2 ?
        }
    }
}

class B extends A {
    void b() {
        // 0
        synchronized (this) {
            // 1
            a();
        }
    }
}

有没有办法以编程方式获得此计数?

编辑:

我知道为什么我们需要增加/减少计数。我想我们可以检查一个Thread.holdsLock并继续进行而不增加它是否为真。但是在退出“内部”同步块时,我们不知道当前同步块是否是“最外层”块。因此,我们不知道什么时候应该释放锁。

谢谢你们,伙计们。

1 个答案:

答案 0 :(得分:4)

目的是防止在退出最外面的同步块之前释放锁。