Я читаю эту книгу под названием «Java Concurrency in Practice», и автор приводит пример публикации небезопасного объекта. Вот пример:
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?