skyrocknroll commented on pull request #10583:
URL: https://github.com/apache/pulsar/pull/10583#issuecomment-840924787


   @merlimat As I have mentioned earlier, if two threads are both reading and 
writing to a shared variable, then using the volatile keyword for that is not 
enough. You need to use a synchronized in that case to guarantee that the 
reading and writing of the variable is atomic. Reading or writing a volatile 
variable does not block threads reading or writing. For this to happen you must 
use the synchronized keyword around critical sections.
   
   As an alternative to a synchronized block you could also use one of the many 
atomic data types found in the java.util.concurrent package. For instance, the 
AtomicLong or AtomicReference or one of the others.
   
   In case only one thread reads and writes the value of a volatile variable 
and other threads only read the variable, then the reading threads are 
guaranteed to see the latest value written to the volatile variable. Without 
making the variable volatile, this would not be guaranteed.
   Ref http://tutorials.jenkov.com/java-concurrency/volatile.html


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to