Если вы говорите о том, о чем, я думаю, вы говорите, то это интересная дискуссия.
Технически , потому что setFirst()
и getFirst()
не synchronized
, тогда возможно для setFirst()
для внедрения одного объекта в Потоке 1 и getFirst()
для возврата другого объекта в Потоке 2. Модель памяти Java оставляет за собой право сделать это "в конечном итоге непротиворечивым"как говорится.
Так что в случае Spring, который настраивает свой граф бинов во время запуска (или внутренний поток запуска сервера), возможно, что потоки HTTP-запроса (например) не увидят этот бинГрафик правильно, из-за отсутствия синхронизации.
Примечание: это не имеет ничего общего с одновременным доступом.Даже если HTTP-запросы приходят после инициализации Spring, модель памяти Java не гарантирует, что эти потоки будут видеть правильные данные.
На практике этого никогда не происходит (по крайней мере, я никогда не видел этобывает).Отсутствие синхронизации действительно является проблемой только для параллельных потоков, что не является проблемой здесь.
Так что это действительно академический аргумент.
Если это не что вы говорите, мои извинения.Это все еще интересная мысль.