Рассмотрим следующий код: < /p>
public class Holder {
private int value;
public Holder(int value) {
this.value = value;
}
public void assertValue() {
if (value != value) throw new AssertionError("Magic");
}
}
class HolderContainer {
// Unsafe publication
public Holder holder;
public void init() {
holder = new Holder(42);
}
}
< /code>
Автор гласит, что: < /p>
- В Java конструктор объекта сначала записывает значения по умолчанию ко всем полям перед запуском подкласса. Современное значение в следующий раз, поэтому Assertn может бросить AssertionError. и в следующем моменте значение = 42. < /p>
Я согласен с точкой 1, что конструктор объекта сначала заполняет поля со значениями по умолчанию. Но я не понимаю баллов 2 и 3.public class Holder {
int value;
public Holder(int value) {
//Sleep to prevent constructor to finish too early
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.value = value;
}
public void assertValue() {
if(value != value) System.out.println("Magic");
}
}
< /code>
Я добавил Thread.sleep (3000), чтобы заставить поток подождать, прежде чем объект будет полностью построен. < /p>
public class Tests {
private HolderContainer hc = new HolderContainer();
class Initialization implements Runnable {
public void run() {
hc.init();
}
}
class Checking implements Runnable {
public void run() {
hc.holder.assertValue();
}
}
public void run() {
new Thread(new Initialization()).start();
new Thread(new Checking()).start();
}
}
< /code>
В примере: < /p>
Первый поток Inits Holder Object < /li>
Вызовы второго потока AssertValue < /li>
< /ol>
Основные потоки запускают два потока: < /p>
news (. Полностью построить объект держателя займет 3 секунды < /li>
New Thread (New Cecking ()). Start (); Поскольку объект Holder по -прежнему не построенный код выбросит NullPointerException < /strong> < /li>
< /ol>
Следовательно, невозможно подражать ситуации, когда поле имеет значение по умолчанию. эмулировать поведение для поля значений по умолчанию?
Подробнее здесь: https://stackoverflow.com/questions/506 ... nstruction