Дано:Java SCJP/OCPJP
public class NamedCounter{
private final String name;
private int count;
public NamedCounter(String name) { this.name = name; }
public String getName() { return name; }
public void increment() { count++; }
public int getCount() { return count; }
public void reset() { count = 0; }
}
Какие три изменения должны быть сделаны, чтобы адаптировать этот класс, чтобы безопасно использовать несколько потоков? (Выберите три.)
A. сброс (объявлять), используя ключевое слово синхронизированного
Б. объявить GetName(), используя ключевое слово синхронизированного
С. объявить GetCount(), используя ключевое слово синхронизированного
Д. объявить конструктор с помощью синхронизированного ключевого слова
Е. объявить приращение(), используя ключевое слово синхронизированного
Ответы: A, C, E. Но я не понимаю, почему. Согласно синхронизированному ключевому слову, используемому только для операций манипуляции. Так зачем отвечать C?
Этот вопрос исходит из свалок SCJP.
Вам нужна безопасность потоков (синхронизация) для любых значений, которые * могут быть мутированы, * который включает в себя 'count'. – VGR
Приращение переменной не является потокобезопасной. Для этого требуются операции загрузки и хранения, а поток, выполняемый на другом ЦП, может выполнять свою собственную загрузку или хранить в том же месте памяти, перемеженном между этими операциями. – dammina