При инициализации класса могут возникать deadlock'и.
Например, есть следующий код
class A {
static final B b = new B();
}
class B extends A {
}
Это потенциально проблемное место. Есть ли какие то решения для такого кода, позволяющие избежать данную ситуацию?
UDP:
Напишу подробнее.
Есть реализация неизменяемого списка.
abstract class List
Ответ
Можно перенести поле EMPTY в класс Empty с соответствующей сменой видимости (как это и сделано в Guava).
Тогда класс Empty будет инициализирован либо при вызове List.create() (класс List в этот момент уже загружен), либо сам по себе (что может вызвать загрузку List, но т.к. List больше не требует Empty, дедлок исключен)
Комментариев нет:
Отправить комментарий