Я читаю эту книгу под названием «Параллелизм Java на практике», и автор приводит пример публикации небезопасных объектов.Вот пример.
public Holder holder;
public void initialize(){
holder = new Holder(42);
}
и
public class Holder {
private int n;
public Holder(int n) { this.n = n; }
public void assertSanity() {
if (n != n)
throw new AssertionError("This statement is false.");
}
}
Значит ли это, что другой поток имеет доступ к объекту, когда он даже не полностью построен?Я предполагаю, что когда поток A вызывает holder.initialize();
, а поток B вызывает holder.assertSanity();
, условие n != n
не будет выполнено, если поток A еще не выполнен this.n = n;
Означает ли это также, что если яиметь более простой код, такой как
int n;
System.out.println(n == n); //false?