Я понимаю, что ключевое слово volatile в Java может сделать операции чтения / записи ссылочных переменных и всех примитивов, кроме long и double, атомарными по своей природе.
Я также знаю составные операторы, такие как увеличение целого числа, var ++, не являются атомарными и не должны использоваться вместо синхронизированных операторов.
А как насчет этого класса?
public class Setter{
private int num = 0;
public int setNum(int numIn){
num = numIn;
return num;
}
}
Теперь скажем, что вы объявляете экземпляр Setter как volatile.
public class Main {
private volatile Setter s;
public static void main(String[] args){
s = new Setter();
s.setNum(5);
}
}
Является ли вызов метода setNum атомарным?Безопасен ли этот оператор, если несколько потоков вызывают его одновременно, каждый с разными значениями?
Что может быть примером правильного использования энергозависимого класса и использования его в небезопасном составном операторе?