允许一种方法在Java中锁定其父对象

Java中有没有办法让方法锁定(互斥)它所在的对象?

我知道这听起来令人困惑,但基本上我不想与这个C#代码片段相等,而是使用Java。

lock(this)
{
    // Some code here...
}

我的任务是将以.Net编写的API重新实现为Java,并且我被要求保持Java版本与.Net版本类似于人类可能的版本。 这并不是因为.Net版本看起来像是从我无法访问的C ++版本转录而来的。

无论如何,上面的行出现在C#版本中,我需要一些在Java中做相同的事情。


这相当于:

synchronized (this)
{
}

(不,你一般不应该用C#或者Java来做,而应该锁定私有引用,而这些私有引用没有其他访问方式,当然你可能已经意识到了这一点 - 但我不想留下一个答案没有警告:)



我会推荐Brian Goetz的“实践中的Java并发性”。 这是一本很好的书。

保持同步块尽可能小可能是件好事。 在方法上使用synchronized修饰符是粗粒度的,有时是必需的,但除此之外,您可以使用另一个对象来执行该操作,从而使块更小。

喜欢这个:

public class PrivateLock {
    private final Object myLock = new Object();
    @GuardedBy("myLock") Widget widget;

    void someMethod() {
        synchronized (myLock) {
            // Access or modify the state of widget
        }
    }
}
链接地址: http://www.djcxy.com/p/76245.html

上一篇: Allowing a method to lock its parent Object in Java

下一篇: What is the difference between atomic / volatile / synchronized?