У меня есть служба, к которой могут обращаться различные темы. Служба имеет 3 лонги и два метода - метод, который добавляет их все вместе и метод, который изменяет средний один к 0.Синхронизировать два разных метода с помощью eachother или синхронизировать переменные
private long a = 10;
private long b = 10;
private long c = 10;
public long add(){
return a + b + c;
}
public void foo(){
b = 0;
}
Теперь, конечно, код становится более сложным, но дело в том, что в то время как на нити доступа add() другой поток может получить доступ к методу foo() и изменить значение b, поэтому im никогда не уверен, каким будет результат. Как я могу синхронизировать эти два метода или синхронизировать переменную a, b, c, чтобы это было безопасным потоком?
Вы не можете синхронизировать переменные. Просто так вы знаете. –
@ DeepakBala, что вы говорите, технически верно, но не забывайте, что вся точка взаимного исключения заключается в защите _data_. Мы делаем это на Java, бросая «синхронизированный» блок вокруг _every place_, где данные модифицируются _или_. Мы используем 'private' в Java, чтобы ограничить количество мест, где эта синхронизация необходима. –