是否有在Java中的方式来获得的方法来锁定(互斥),其是在对象?

我知道这听起来混乱,但基本上我wan't一个equivelent到这个片段的C#但在Java。

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

我一直在负责重新实现.NET编写成Java的API,我已经被告知要保持Java版本类似于.NET版本以不可思议的。这不是由一个事实,即.NET版本看上去就像是从C ++版本,我没有获得转录帮助。

反正上面的行出现在C#版本,我需要的东西,做同样在Java中。

有帮助吗?

解决方案

的是,当量是:

synchronized (this)
{
}

(不,你不应该一般做它C#或Java的身高锁定在私有引用它没有别的访问您可能知道的已经,当然 - 。但我不想离开一个答案没有警告:)

其他提示

假设C ++代码是一个简单的互斥,将“锁定”与“同步”

synchronized (this)
{
// ...
}

这里的 Java并发教程了解更多信息。

我建议布赖恩戈茨的 “ Java并发在实践。”这是一个很好的书。

它可以保持同步块尽可能小一件好事。使用上的方法中的同步调节剂为粗粒和有时是必要的,但除此之外,可以使用另一个目的是做到这一点,保持块小。

像这样:

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

    void someMethod() {
        synchronized (myLock) {
            // Access or modify the state of widget
        }
    }
}

您还应该考虑的API(JDK 5.0+),用于附加的并发管理的java.util.concurrent包作为信号,交换机等对象,例如

HTTP:/ /java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top