На потокобезопасности инициализации переменной экземпляра

Мне, оказывается, нравится TorqueScript - он служил мне хорошо за эти годы - и мне нравится Игровой Разработчик Крутящего момента. Для 3D у них Есть Игровой Игровой Усовершенствованный Механизм Механизма и Крутящего момента Крутящего момента. GarageGames является довольно хорошим материалом. Мало кривой обучения впереди, но после этого Вы будете приплывать'

5
задан non sequitor 18 October 2009 в 20:07
поделиться

4 ответа

Безопасность потоков не является проблемой, потому что это происходит на этапе построения, и два потока не могут создавать один и тот же объект. Что ж, если вы позволите this ускользнуть из конструктора, то другой поток может получить доступ к объекту во время построения, но вам действительно не следует этого делать. С точки зрения функциональности, эти два параметра одинаковы, поэтому даже если бы были проблемы с безопасностью потоков, они повлияли бы на оба одинаково.

Первый вариант, инициализации полей при их объявлении не всегда возможно, если вам нужно выполнить некоторые вычисления, которые не могут быть выполнены в инициализаторе (даже в этом случае вы можете сохранить инициализацию вне конструктора, если вы делаете это в блоке инициализатора) . Но если возможен любой способ, то это чисто проблема стиля, и я не думаю, что среди Java-программистов есть явные предпочтения, поэтому выбирайте тот, который вам кажется лучше.

7
ответ дан 13 December 2019 в 22:11
поделиться

поскольку ваши переменные являются переменными экземпляра, а не переменными класса, у вас не возникает проблем с безопасностью потоков во время инициализации с использованием любого метода. Я уверен, что другие поддержат, если есть рекомендации, рекомендованные стандартом Java.

1
ответ дан 13 December 2019 в 22:11
поделиться

Я думаю, что это вопрос личных предпочтений и стандартов кодирования вашего проекта.

Просто убедитесь, что вы инициализируете переменные только в одном месте (конструктор или встроенный).

Выполнение инициализации done в конструкторе дает вам лучшее место для обработки исключений.

1
ответ дан 13 December 2019 в 22:11
поделиться

С точки зрения безопасности потоков они эквивалентны. Оба должны будут выполнять одни и те же инструкции, и если вы предпочитаете второй (с чем я согласен с вами в ваших предпочтениях), я бы использовал его. Если вы хотите обеспечить безопасность потоков для конструктора, вам потребуется синхронизированный вызов для вызова конструктора.

0
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: