I am wondering at the difference between declaring a variable as volatile
and always accessing the variable in a synchronized(this)
block in Java?
According to this article http://www.javamex.com/tutorials/synchronization_volatile.shtml there is a lot to be said and there are many differences but also some similarities.
I am particularly interested in this piece of info:
…
- access to a volatile variable never has the potential to block: we’re only ever doing a simple read or write, so unlike a synchronized block we will never hold on to any lock;
- because accessing a volatile variable never holds a lock, it is not suitable for cases where we want to read-update-write as an atomic operation (unless we’re prepared to “miss an update”);
What do they mean by read-update-write? Isn’t a write also an update or do they simply mean that the update is a write that depends on the read?
Most of all, when is it more suitable to declare variables volatile
rather than access them through a synchronized
block? Is it a good idea to use volatile
for variables that depend on input? For instance, there is a variable called render
that is read through the rendering loop and set by a keypress event?