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