volatile

MatheStein

Aktives Mitglied
Hey Leute,

wann muss ich in Java eigentlich den Modifier "voaltile" benutzen?
Angenommen ich arbeite mit Threads, muss ich dann wirkich jede Variable, die von mehreren Threads gemeinsam genutz wird als volatile deklarieren, damit der Compiler sie nicht evtl. wegoptimiert bzw im Cache hält und somit ein Thread Änderung an ihr durch einen anderen Thread nicht mitbekommt?

Gruß :)
 

eRaaaa

Top Contributor
Nein, Variablen die in z.B. einem synchronized Block verändert werden werden für die anderen Threads auch sichtbar..daher kannst du das so pauschal nicht sagen. Im Gegenteil, volatile kann man nicht immer sinnvoll einsetzen und es gibt einige Regeln zu beachten.
Du kannst dir ja mal den Artikel von der Frau Langer durchlesen :D
 
B

bygones

Gast
finde ich recht gut: AngelikaLanger.com - Details zu volatile-Variablen - Angelika Langer Training/Consulting

bzw
* volatile is not necessary– or in fact possible– for fields that are immutable (declared final);
* volatile is not necessary for variables that are accessed by only one thread (though of course you have to make a correct decision that they are only accessed by one thread!);
* volatile is not suitable for complex operations where you need to prevent access to a variable for the duration of the operation: in such cases, you should use object synchronization or one of Java 5's explicit lock classes added.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben