@acm Личное общение.

ге Java Concurrency in Practice вы можете найти следующий код:

@ThreadSafe
public class SafePoint { 
    @GuardedBy("this") private int x, y;
    private SafePoint(int[] a) { this(a[0], a[1]); }
    public SafePoint(SafePoint p) { this(p.get()); }
    public SafePoint(int x, int y) { 
        this.x = x;
        this.y = y;
    }
    public synchronized int[] get() { return new int[] { x, y };
    }
    public synchronized void set(int x, int y) { this.x = x;
        this.y = y;
    }
}

Это помечено как@ThreadSafe.

Я уверен, что этот класс не является потокобезопасным (если я правильно понимаю этот термин).

Пример:

 SafePoint racePublishedSafePoint; // field

 // thread 1:
 racePublishedSafePoint = new SafePoint(1,1);

 // thread 2:
 SafePoint sp;
 while(true){
   SafePoint sp = racePublishedSafePoint;
   if(sp != null) break;
 }
 System.out.println(sp.get()[0]);
 System.out.println(sp.get()[1]);

Я считаю, что есть несколько возможных результатов:

Приложение не заканчивается
ещеЕсли приложение завершено, мы можем увидеть
а) 0 0
б) 0 1
в) 1 0
г) 1 1

Я прав?

Если это правда, почему автор пометил класс как потокобезопасный? Я думал, что потокобезопасный класс - класс, который можно использовать в параллельном приложении без сложного анализа.

Что хотел сказать автор?

Постскриптум

Я прочиталЧастный конструктор, чтобы избежать гонки

... и моя тема не дублируется.

Ответы на вопрос(1)

Ваш ответ на вопрос