[concurrency-interest] Race condition on singleton

Guy Korland gkorland at gmail.com
Thu Dec 9 08:40:24 EST 2010


Faud,

Thanks for the quick answer, but I don't see how it should change.

Regards,
Guy Korland


On Thu, Dec 9, 2010 at 2:58 PM, Fuad Malikov <fuad at hazelcast.com> wrote:

> The proper usage should be:
>
> public class MyClass{
>
>  private static class MyClassHolder {
>    public static MyClass myClass = new MyClass();
> }
>
>   private final HashMap map;
>
>   private MyClass(){
>       map = new HashMap();
>   }
>
>   public void put(Object k, Object v){
>      map.put(k,v);
>   }
>
>   static public getMyClass(){
>     return MyClassHolder.myClass;
>   }
> }
>
> Fuad
>
> On Thu, Dec 9, 2010 at 2:44 PM, Guy Korland <gkorland at gmail.com> wrote:
> > Hi,
> > We found a very strange pattern that seems like contradicting the Java
> > Memory Model.
> > It seems like a class that is maintained as singleton doesn't have its
> > constructor fully initialized!
> > See the code example bellow.
> > public class MyClass{
> >   private static final MyClass = new MyClass();
> >
> >   private final HashMap map;
> >   private MyClass(){
> >       map = new HashMap();
> >   }
> >   public void put(Object k, Object v){
> >      map.put(k,v);
> >   }
> >   static public getMyClass(){
> >     return myClass;
> >   }
> > }
> >
> > And when we invoke the following:
> > MyClass.getMyClass().put("a","b");
> > We get a NullPointerException on the "map.put(k,v);", meaning the
> map==null
> > !?!?
> > Any ideas?
> > Thanks,
> > Guy Korland
> >
> > _______________________________________________
> > Concurrency-interest mailing list
> > Concurrency-interest at cs.oswego.edu
> > http://cs.oswego.edu/mailman/listinfo/concurrency-interest
> >
> >
>
>
>
> --
>
> @fuadm
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20101209/67ed9547/attachment-0001.html>


More information about the Concurrency-interest mailing list