Оба оператора сохраняют значение в переменную atomi c. Вызов exchange
возвращает ранее сохраненное значение, которое в этом случае отбрасывается. Однако это не означает, что два вызова абсолютно одинаковы. Операция exchange
- это операция чтения-изменения-записи, а операция store
- только запись. Это означает, что если у нас есть:
// thread 1
turn.store(0); // A
// thread 2
turn.exchange(1); // B
и если поток 2 считывает значение, сохраненное потоком 1, то строка A синхронизируется со строкой B. Если поток 2 будет использовать store
вместо exchange
, не было бы такой синхронизации.