Безопасна ли/допустимая практика блокировки частной переменной поля (вместо использования объекта блокировки)? Таким образом, у меня могут быть разные блокировки для разных целей. Пример ниже:Множественные блокировки объектов в Java?
class Test {
private Integer x = 0;
private Integer y = 0;
public void incrementX() {
synchronized(x) {
x++;
}
}
public void decrementX() {
synchronized(x) {
x++;
}
}
public void incrementY() {
synchronized(y) {
y++;
}
}
public void decrementY() {
synchronized(y) {
y++;
}
}
Должен ли я иметь объект блокировки для каждого частного члена, которого я хочу заблокировать? Пример:
class Test {
private final Object xLock = new Object();
private final Object yLock = new Object();
private Integer x = 0;
private Integer y = 0;
...
}
Или я должен просто иметь один общий замок и использовать его для всех частных переменных, которые требуют блокировки? Пример:
class Test {
private final Object objLock = new Object();
private Integer x = 0;
private Integer y = 0;
...
}
для примитивов, рассмотрите варианты Atomic *, например. AtomicInteger – maress