К классу можно получить доступ из многих потоков. Должен быть логгер в этом случае тоже окончательный и статический? Спасибо.
Должен ли регистратор всегда быть окончательным и статическим?
Ответы (3)
Все основные пакеты журналирования Java (java.util.logging
, log4j
и т. Д.) Синхронизированы и потокобезопасны. Стандартный шаблон private final static
регистратора для каждого класса подходит, даже если класс вызывается из нескольких потоков.
Да, регистратор должен быть статическим и окончательным. Также желательно личное. Для каждого класса требуется только один экземпляр регистратора, а также, если вы не собираетесь динамически изменять предпочтения журнала, лучше сделать его окончательным.
Logger является потокобезопасным, и вам не нужно беспокоиться о потоковой передаче.
Если сделать регистратор окончательным и / или статическим, это никоим образом не повлияет на безопасность потоков при использовании регистратора. Если экземпляр регистратора используется из нескольких потоков, убедитесь, что вы используете поточно-безопасный регистратор.
В общем, регистратор должен быть закрытым статическим окончанием, но не предполагайте, что это делает его потокобезопасным. Наиболее распространенные фреймворки ведения журналов являются поточно-ориентированными, поэтому, если вы используете одну из них, все будет хорошо.