What do you mean by obtain a single object?
If you mean remove from the Vector, than the case is a bit different
than what you describe.
Meaning, if two threads obtain different objects than unless they try
to retrieve the same object than the two transaction won't conflict.
On the other hand you should notice two issues:
1. Using any java.util.* collection maintains a global counter to
answer getSize().
This counter can become easily a bottleneck.
2. Using java.util.Vector can't scale since it is a synchronized class
which can't benefit from STM.
Guy