Hallo zusammen,
ich hab in letzter zeit öfter mal eine ConcurrentLinkedQueue benutzt, diese ist laut doku ( ConcurrentLinkedQueue (Java Platform SE 6) ) threadsafe.
Außerdem habe ich gelernt, dass man Variablen deren Inhalte veränderlich sind als volatile deklarieren soll, um zu verhindern, dass ein thread das objekt in den chache schreibt und änderungen nicht mehr für die anderen threads sichtbar sind.
Muss ich jetzt bei der Deklaration volatile benutzen um zu verhindern, dass das Objekt selbst in den Cache geshrieben wird, oder ist das nicht nötig, weil die Klasse threadsafe ist?
Also dann so:
oder kann ich das volatile weglassen, da die Klasse threadsicher ist?
Das wäre dann so:
edit: obwohl es private ist greifen natürlich trotzdem mehrere threads drauf zu, z.B. über einen getter oder beim erzeugen wird dann ein attribut eines anderes objekts aufs selbe objekt gesetzt.
Ich muss dann ja auch bei jede referenz darauf volatile deklarieren, oder?
ich hab in letzter zeit öfter mal eine ConcurrentLinkedQueue benutzt, diese ist laut doku ( ConcurrentLinkedQueue (Java Platform SE 6) ) threadsafe.
Außerdem habe ich gelernt, dass man Variablen deren Inhalte veränderlich sind als volatile deklarieren soll, um zu verhindern, dass ein thread das objekt in den chache schreibt und änderungen nicht mehr für die anderen threads sichtbar sind.
Muss ich jetzt bei der Deklaration volatile benutzen um zu verhindern, dass das Objekt selbst in den Cache geshrieben wird, oder ist das nicht nötig, weil die Klasse threadsafe ist?
Also dann so:
Java:
private volatile ConcurrentLinkedQueue<Double> clq = new ConcurrentLinkedQueue<Double>();
Das wäre dann so:
Java:
private ConcurrentLinkedQueue<Double> clq = new ConcurrentLinkedQueue<Double>();
edit: obwohl es private ist greifen natürlich trotzdem mehrere threads drauf zu, z.B. über einen getter oder beim erzeugen wird dann ein attribut eines anderes objekts aufs selbe objekt gesetzt.
Ich muss dann ja auch bei jede referenz darauf volatile deklarieren, oder?