Я не стану исследовать различные «факты» в вашем вопросе, я просто перефразирую:
«Без ссылок это не правда!»
Тем не менее, любой, кто имеет дело с потоками в Java в наши дни, должен будет попытаться , чтобы избежать непреднамеренного установления отношений произойдет до и произойдет после .Любое использование энергозависимой переменной, синхронизированного блока, объекта Lock или атомарной переменной обязательно должно установить такую взаимосвязь.Это немедленно приводит к блокированию очередей, синхронизированных хэш-карт и целому ряду других битов и кусочков.
Как вы можете быть уверены, что реализация JAXB действительно сможет сделать что-то не то?
ЧтоПри этом объекты, полученные из JAXB, примерно так же безопасны, как и любой объект Java, если с ними работает JAXB, но сами методы маршалинга / демаршаллинга не являются поточно-ориентированными .Я считаю, что вам не о чем беспокоиться, если:
Ваши потоки не разделяют объекты-обработчики JAXB.
Вы передаете объекты между потоками безсинхронизация: совершенно нездоровая практика, независимо от того, откуда появились эти объекты ...
РЕДАКТИРОВАТЬ:
Теперь, когда вы отредактировали свой вопросмы можем дать более конкретный ответ:
Генерируемые JAXB объекты столь же поточно-ориентированы, как и любой другой объект Java, что совсем не так.Прямой вызов конструктора сам по себе не обеспечивает никакой безопасности потоков.Без установленного отношения случай-до JVM может возвращать частично инициализированные объекты во время вызова new
.
Существует способов , а именнос помощью использования конечных полей и неизменяемых объектов , чтобы избежать этой ловушки, но очень трудно понять, особенно с JAXB , и это на самом деле не решает проблему распространенияправильная ссылка на объект, так что все потоки смотрят на один и тот же объект.
Итог: вы можете безопасно перемещать данные между потоками, используя надлежащие методы синхронизации.Не предполагайте ничего о базовой реализации, за исключением того, что четко задокументировано.Даже в этом случае лучше соблюдать осторожность и защищать код - обычно это в любом случае приводит к более четкому взаимодействию между потоками.Если на более позднем этапе профилировщик указывает на проблему с производительностью, , то , вам следует подумать о тонкой настройке кода синхронизации.