Provides either an existing T object or creates a new one using builder function.
This method is thread-safe and can be safely invoked without external synchronization.