Разница между одноэлементным в Guice и регулярным синглетоном связана с контекстом.
Когда вы не используете Guice, вам нужно самостоятельно управлять своим синглоном. Чтобы убедиться, что создан только один экземпляр, у вас есть частный конструктор, статическое поле и методы доступа к этому экземпляру (либо геттер, либо окончание поля). Это означает, что экземпляр является singleton в контексте загрузчика классов. Если вы создадите другой загрузчик классов и скажите ему загрузить свой одноэлементный класс, вы можете создать второй экземпляр.
Когда одноточечно управляется Guice заменить частный конструктор и статическое поле с @Singleton
аннотацию, говоря форсунку, что она должна только когда-либо создать один экземпляр этого класса и использовать его в любом месте она запрашивается. Поскольку возможно одновременное использование нескольких инжекторов (либо потому, что вам нужны два совершенно разных контекста, либо потому, что вы используете дочерние инжекторы), вы должны не должны запретить Guice создавать экземпляр нескольких экземпляров вашего класса.
Кроме того, поскольку вы должны полагаться на Guice для обеспечения синглтона везде, где требуется, нет необходимости в статическом поле, содержащем экземпляр singleton, поскольку он никогда не должен быть доступен.
Да, это эквивалентно 'StaticObject.getInstance()' или 'public final static Object singleton'. Таким образом, вы убедитесь, что он потокобезопасен в многопоточном приложении. Во всяком случае, какой вопрос? –