I don't think this is anything to do with synchronisation.
There is
no way that your code can return identical object references. Every call will instantiate a new object. You do not need any synchronisation to ensure that. In fact, the synchronisation that you have is unnecessary, unless any of the method calls (to code you haven't posted) require it.
However, you need to be careful with your terminology. In Java, "identical" object references point to the exact same object, whereas "equal" objects can be separate objects that are considered equal according to the equals() method.
It may be possible for your method to return equal objects, depending on the semantics of equals() for your objects. By default, equals() tests for identity, so the default equals() can never return true for your code. So, I guess equals() has been overridden for your class;
you should go look in detail at that.
[ June 20, 2006: Message edited by: Peter Chase ]