Атомарность Multithreading

Рейтинг: 0Ответов: 1Опубликовано: 16.12.2014
synchronized void takeBackSalary(int salary){
        this.salary = bank.deal(salary);
 }

Данный метод нужно синхронизировать, как я сделал, или процесс и без этого атомарный?

*Использованный внутри метод синхонизирован.

Ответы

▲ 1Принят

Атомарность присваивания зависит от типа переменной salary.

Тем не менее, это не единственный аспект, на который нужно обратить внимание. Если значение переменной salary читается из несколькоих потоков, то необходимо обеспечить видимость изменения этой переменой другим потокам. Ваш пример ее обеспечивает из-за synchronized. Хотя аналогичного эффекта можно достичь с помощью модификатора volatile или атомарных ссылок (AtomicRef или другой класс, в зависиомсти от типа).

PS: Прочитайте уже книгу "Concurrency in practice" и многое встанет на свои места. Не дело это, изучать тонкости многопоточного программирования с помощью форумов.