
Envoyé par
Yo Eight
Pour moi, ce cas correspond plus à une erreur de conception car tu exposes un état (notre variable volatile) au monde externe. Pour moi ce que tu décris correspond à l'exposition de ta variable en tant que variable globale. Donc oui je suis d'accord, optimiser du code pas clean, c'est pas facile
Je ne parle pas forcément d'un code pas propre...
Tu as ceci :
private volatile static Singleton instance;
La JVM ne peut pas savoir que tu ne vas modifier ce champ qu'une seule et unique fois. De plus le mot volatile lui indique que ce champ peut être modifié depuis différents threads.
Elle devra impérativement vérifier l'état de la référence à chaque accès, car elle peut potentiellement changer !
Même si c'est plus rapide que de la synchronisation, ca reste moins performant qu'un simple accès direct.
En plus dans le code de ton getInstance() tu y accèdes au moins deux fois (une fois dans le if, et une fois pour le return).

Envoyé par
Yo Eight
Encore une fois, dans mon cas (je ne parle pas d'utiliser une variable volatile dans tous les cas), il n'y aura pas ce genre de problème car on ne peut pas modifier ma variable dans un autre thread.
Dans ton code oui. Mais via volatile tu indiques le contraire au compilateur et à la JVM...
a++
Partager