Если доступ к объекту возможен только из одного потока, он не должен быть потокобезопасным, даже если это Guice @Singleton
.Guice не выполняет внутреннюю многопоточность, которая может привести к сбою не поточечного синглтона ... процесс создания Injector
полностью выполняется в потоке, который вызывает Guice.createInjector
, и любая динамическая подготовка выполняется в потоке,звонки provider.get()
.Конечно, синглтон будет создаваться только один раз, а затем просто возвращаться каждый раз, когда он необходим ... когда он создается, зависит от того, связан ли он как eager singleton (всегда создается при запуске) иInjector
создается в Stage.DEVELOPMENT
(создается только при необходимости) или Stage.PRODUCTION
(создается при запуске).
Очень часто случается так, что синглтоны могут быть доступны из нескольких потоков одновременнохотя (особенно в веб-приложениях), отсюда и предупреждение.В то время как многие разработчики поймут, что в этом случае синглтон должен быть безопасным для потоков, другие могут этого не делать, и я полагаю, что им стоило предупредить их.