Because it's much cleaner this way. UrlBuidler should be used to build Urls which itself does does not require locking/synchronization (separation of concerns). As a result the callee would have to make sure it is using this class in a thread safe manner. I also think synchronization is more expensive than allocation. Threading is also more difficult to get right and keep it right. Conceptually newing up stuff is what we did before UrlBuilder was created since we built urls inside the methods we call the UrlBuilder from and in some cases we just `+` strings but in some cases we created StringBuilder instances.