[concurrency-interest] Race condition on singleton

Justin T. Sampson justin at krasama.com
Mon Dec 13 00:10:16 EST 2010


I'm surprised with all the replies that no one commented on the lack of
synchronization on accessing the contents of the map. That can easily cause
NPEs from within map.put(k, v), or almost any other arbitrary behavior for
that matter.

Cheers,
Justin

On Thu, Dec 9, 2010 at 4:44 AM, 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20101212/ba26c1f6/attachment.html>


More information about the Concurrency-interest mailing list