Конструирование Java-объектов в многопоточной среде

Я читаю эту книгу под названием «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?
5
задан denniss 7 June 2011 в 17:23
поделиться