Вопросы о java.util.current.atomic.atomicreferencefieldupdater [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Вопросы о java.util.current.atomic.atomicreferencefieldupdater [закрыто]

Сообщение Anonymous »

jdk: openjdk 17.0.2 < /p>
Я сталкиваюсь с проблемой, которая связана с Atomicreferencefieldupdater. Короче говоря, наш код точно так же: < /p>

Код: Выделить всё

public class Test {

enum State {
INIT,
OPEN,
CLOSED
}

private static final AtomicReferenceFieldUpdater stateUpdater =
AtomicReferenceFieldUpdater.newUpdater(Test.class, State.class, "state");
volatile State state;

public Test() {
state = State.INIT;
}

public void doSomething() {
if (stateUpdater.compareAndSet(this, State.INIT, State.OPEN)) {
// do something
return;
} else {
String message = String.format("Unexpected state: %s, expect INIT state.", state);
System.out.println(message);
}
}

public static void main(String[] args) {
new Test().doSomething();
}
}
Когда я запускаю New Test (). Dosomething () , в методе DoSommething , операция CAS может потерпеть неудачу, и программа переходит в ветвь других , но она печатает неожиданное состояние: Init, ожидайте инициатор. Но мы столкнулись с этим один раз. Так что я просто блуждаю, возможно ли это? Почему?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... eldupdater

Вернуться в «JAVA»