-
Synchronized en lecture
Bonjour à tous =D,
j'ai une toute petite question et j'espère que quelqu'un pourra y répondre ici (je n'en doute pas ^^).
J'utilise deux threads dans mon programme (un zelda-like avec libgdx) et je me heurte à un problème de concurrence.
J'aimerais savoir si on est obligé d'utiliser le mot clef "synchronized" pour sécuriser une donnée qui ne sera utilisé qu'en lecture ? Parce que j'aimerais éviter mais j'ai l'impression que ce n'est pas évitable.
Merci ;)
-
Hello,
je suis pas sûr de ce que tu appelles "sécuriser", mais si ta variable peut être modifiée par d'autres threads, le thread en cours ne le verra pas sans une synchronisation quelconque.
Pour une variable simple, un synchronized n'est pas forcément nécessaire. Rendre la variable volatile peut suffire. Mais s'il y en a plusieurs, il va falloir utiliser synchronized ou réfléchir plus profondément.
-
Si tu ne veux faire que de la lecture de ta variable, sache que le synchronized est TRES couteux... Le synchronized bloque tout quelle que soit l'action que tu fais.
Regarde du côté du ReadLock ( https://docs.oracle.com/javase/7/doc...WriteLock.html ) ou des objets de type AtomicXXX ( https://docs.oracle.com/javase/7/doc...icInteger.html ) pour éviter les blocages pour de la simple lecture.
-
Si tu ne souhaites faire que de la lecture de tes variables (cf : pas d'affectation, pas de mutation) pour l'ensemble des threads, utiliser un synchronized est juste inutile...