Question

Existe-t-il un moyen en Java d’obtenir une méthode pour verrouiller (mutex) l’objet dans lequel il se trouve?

Je sais que cela semble déroutant, mais au fond, je ne suis pas un équivalent de cet extrait de C # mais en Java.

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

On m'a chargé de réimplémenter une API écrite en .Net en Java, et il m'a été demandé de garder la version Java aussi semblable que possible à la version .Net. Cela n’aide en rien le fait que la version .Net semble avoir été transcrite à partir d’une version C ++ à laquelle je n’ai pas accès.

Quoi qu'il en soit, la ligne ci-dessus apparaît dans la version C # et j'ai besoin de quelque chose qui fasse la même chose en Java.

Était-ce utile?

La solution

L'équivalent de cela est:

synchronized (this)
{
}

(Et non, vous ne devriez généralement pas le faire en C # ou en Java. Préférez le verrouillage sur des références privées auxquelles personne n'a accès. Vous le savez peut-être déjà, bien sûr, mais je ne voulais pas laisser une réponse sans avertissement:)

Autres conseils

En supposant que le code C ++ soit un simple mutex, remplacez "lock". avec "synchronisé"

synchronized (this)
{
// ...
}

Voici le didacticiel sur la concurrence Java pour plus d'informations

Je recommanderais les " Concurrence Java en pratique de Brian Goetz. " C'est un excellent livre.

Cela peut être une bonne chose de garder le bloc synchronisé aussi petit que possible. L'utilisation du modificateur synchronized sur la méthode est grossière et parfois nécessaire, mais vous pouvez également utiliser un autre objet qui réduit la taille du bloc.

Comme ceci:

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

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

Vous devez également rechercher dans le package java.util.concurrent de l'API (JDK 5.0+) des objets de gestion des accès simultanés supplémentaires tels qu'un sémaphore, un échangeur, etc.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top