It's getting slightly above my concurrency/memory model knowledge now ;-), but I think the problem is, that a Thread which is created within a ConnectionCreationListener *may* see an incomplete Connection object. Even if the JavaDoc states "not thread-safe", there's no way to externally make it thread-safe by the API user, because afaik synchronization can only be applied to e.g. method calls, but not to make an incomplete object complete afterwards.
From java - About reference to object before object's constructor is finished - Stack Overflow
Even if all of your fields are
final
in a class, sharing the reference to the object to another thread before the constructor finishes cannot guarantee that the fields have been set by the time the other threads start using the object.
which theoretically may result in NPE, even if accessing a final field, which is assigned before publishing the this reference.
Again, I am not sure about all those memory model stuff, it's a difficult topic. Maybe I am wrong, but things like that are probably worth to keep in mind.