Question

Je traversais quelques extraits de code en regardant l'aspect de synchronisation. Je crois que le verrouillage se produit sur les objets. Dans le cas de Java, nous n'avons des références qu'aux objets. Java doit utiliser la référence pour se procurer l'objet et le verrouiller.

Que se passe-t-il si la référence est nul? Je pense que cela se casserait. Si cela devait fonctionner, le verrouillage doit également se produire sur les références (ce qui me bat). Quelqu'un peut-il clarifier cela pour moi.

    synchronized (formatters) {
        if(formatters == null) {
            prepareCache(feedId);
        }
    }
Était-ce utile?

La solution

Selon À ce forum, et de nombreux autres liens connexes. Si les formateurs sont nuls, la NullPointerException sera lancée.

Autres conseils

Vous obtenez une nulpointerException. Par exemple:

class A {
    public static void main(String[] ss) {
        Object o = null;
        synchronized (o) {
        }
    }
}

Vous donne:

Exception in thread "main" java.lang.NullPointerException
    at A.main(A.java:4)

De La déclaration synchronisée Section dans le Spécification de la langue Java:

"SynchronizedStatement: synchronized ( Expression ) Block"... Sinon, si la valeur de l'expression est nul, une nulpointerException est lancée. "

Sssh, vous n'êtes pas censé savoir que ce sont en fait références aux objets! Pensez-y comme ils sont présentés - comme un objet - et non comment ils sont mis en œuvre. La classe d'objets fournit un seul verrou, de sorte que votre objet Fonders l'a hérité. Si les formateurs sont nuls, la synchronisation dessus lancera une nulpointerException.

Dans la mesure du possible, ne vous synchronisez pas sur des objets qui sont réellement utilisés. Synchronisez sur les objets finaux privés que vous créez dans la classe qui fait le verrouillage. La raison en est que les autres peuvent choisir le même objet à synchroniser, ce qui signifie que vous n'avez aucune idée du type d'effets secondaires de ce verrouillage.

Cela ne fonctionnera pas. Vous vous synchronisez sur objets, pas sur variables. Lorsque la variable est nul, il n'y a pas d'objet à synchroniser, donc une exception est lancée.

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