Frage

Gibt es eine Möglichkeit in Java eine Methode, um zu sperren (Mutex) das Objekt, das es in ist?

Ich weiß, das klingt verwirrend, aber im Grunde wan't ich eine equivelent zu diesem Ausschnitt aus C #, aber in Java.

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

Ich habe mit Neuimplementierung eine API geschrieben in .NET in Java beauftragt, und ich habe die Java-Version zu halten, wie ähnlich die .Net Version wie irgend möglich gefragt worden. Dies wird nicht durch die Tatsache, dass die .NET-Version sah aus wie es aus einer C transkribiert wurde ++ Version, die ich habe keinen Zugriff auf.

Wie auch immer die obige Zeile erscheint in der C # -Version und ich brauche etwas, das das gleiche in Java tut.

War es hilfreich?

Lösung

Das Äquivalent davon ist:

synchronized (this)
{
}

(Und nein, sollten Sie im Allgemeinen nicht tun es entweder in C # oder Java Bevorzugen auf private Referenzen Sperren hat, die nichts anderen Zugriff auf Sie sich bewusst sein, vielleicht schon, natürlich -.. Aber ich wollte nicht verlassen, eine Antwort, ohne die Warnung:)

Andere Tipps

Unter der Annahme, dass der C ++ Code ein einfacher Mutex, ersetzen "sperren" auf "synchronisiert"

synchronized (this)
{
// ...
}

Hier ist der Java Concurrency Tutorial für weitere Informationen

würde ich Brian Goetz ' " Java Concurrency in der Praxis ." Empfehlen Es ist ein ausgezeichnetes Buch.

Es kann eine gute Sache sein, den synchronisierten Block so klein wie möglich zu halten. Unter Verwendung des synchronisierten Modifikator für das Verfahren ist grobkörnig und manchmal notwendig, aber ansonsten kann man ein anderes Objekt verwenden, um es zu tun, dass der Block kleiner hält.

Wie folgt aus:

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

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

Sie sollten auch das java.util.concurrent Paket der API aussehen in (JDK 5.0 und höher) für zusätzliche Concurrency Management-Objekte wie Semaphore, Tauscher, etc

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top