Friday, November 19, 2010

Unsafe Singleton

Many mighy think, is there something called unsafe singleton? Singleton is the property, which lets just only one object floats at a time and there are no more than one object. This singleton program will create more than one object under multi threaded environment, which is totally against rationale.

public class SingletonUnsafeDemo
{
public static void main( String[] args )
{
Thread t1 = new Thread()
{
public void run()
{
System.out.println( "UnsafeSingleton: " + UnsafeSingleton.getInstance() );

}
};

Thread t2 = new Thread()
{
public void run()
{
System.out.println( "UnsafeSingleton: " + UnsafeSingleton.getInstance() );

}
};


t1.start();
t2.start();
}
}

class UnsafeSingleton
{
static UnsafeSingleton instance;

public static UnsafeSingleton getInstance()
{
if ( instance == null )
{
Thread.yield(); // !!

instance = new UnsafeSingleton();
}

return instance;
}
}

No comments:

Post a Comment