[concurrency-interest] Significance of volatile for Objects

Peter Veentjer alarmnummer at gmail.com
Fri Mar 7 05:01:06 EST 2008


Volatile helps to prevent 2 issues:

reorderings
visibility.

Reordering:
it prevents that the created hashmap is assigned to the data variable,
before the constructor has run. So it prevents other threads from
seeing a partly constructed hashmap.

Visibility:
It makes sure that thread that reads data, sees the most recently
written value of data. It also makes sure that the reading thread sees
all values written (e.g. the member variables of the hashmap) before
the writing thread did the write to data. This last behavior is
available since Java 1.5 (JMM 133). It is a technique that can be used
to 'transfer' objects from one thread to another in a thread safe
manner. A BlockingQueue for example support this behavior.

For more information I suggest "Java Concurrency in Practice"

PS:
I know you made the remark, but for other less experienced developers
reading this thread.. the example is not threadsafe because HashMap is
not threadsafe. So its internal structure could be corrupted by
concurrent access.

On Fri, Mar 7, 2008 at 10:04 AM, Pavitar Singh <pavitar at pramati.com> wrote:
> Hi,
>
>  If i have something like this:
>
>  volatile Map data = new HashMap();
>
>  then what are the gurantees provided by volatile.
>
>  I know this is wrong usage of volatile. But i just wanted to know
>  gurantees provided by volatile in case of Objects.
>
>  Regards
>  Pavitar
>  _______________________________________________
>  Concurrency-interest mailing list
>  Concurrency-interest at altair.cs.oswego.edu
>  http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
>


More information about the Concurrency-interest mailing list