В документации говорится, что вы можете использовать if-else
несколько раз или switch-case
:
int condition;
setCondition(int condition) {
this.condition = condition;
}
Либо коммутационный футляр
switch (condition) {
case 1: print("one"); break;
case 2: print("two"); break;
или
if (condition == 1) { print("one"); }
else if (condition == 2) { print("two"); }
Далее, condition
объявлен volatile
, а метод setCondition()
вызывается из нескольких потоков.
if-else
не является атомарным, а volatile
переменная write является синхронизирующим действием. Таким образом, в последнем коде могут быть напечатаны как "одна", так и "две" строки.
Этого можно избежать, если была использована локальная переменная метода с начальным значением:
int localCondition = condition;
if (local condition == ..) ..
Оператор switch-case
содержит некоторую начальную копию переменной? Как выполняются операции с поперечными потоками?