I'm not really sure, but I think you should use Synchronized block or method for managing this case instead of just using a synchronized collection, you can synchronized the write methods but let the read methods be non-synchronized, this may result in what you wanted.