锁定私有字段变量(而不是使用锁定对象)是否安全/可接受的做法?这样,我可以为不同的目的使用不同的锁。下面的例子:
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;
...
}