前几天我问了一个类似的问题,但对回复不满意,主要是因为我提供的代码有一些人们关注的问题.
基本上,在Java中锁定私有成员的最佳做法是什么?假设每个私有字段只能单独操作而不能一起操作(比如下面我的Test类示例),你应该直接锁定每个私有字段(例1),还是应该使用每个私有字段的一般锁定对象来锁定(例2)?
示例1:直接锁定私有字段
class Test {
private final List<Object> xList = new ArrayList<Object>();
private final List<Object> yList = new ArrayList<Object>();
/* xList methods */
public void addToX(Object o) {
synchronized(xList) {
xList.add(o);
}
}
public void removeFromX(Object o) {
synchronized(xList) {
xList.remove(o);
}
}
/* yList methods */
public void addToY(Object o) {
synchronized(yList) {
yList.add(o);
}
}
public void removeFromY(Object o) {
synchronized(yList) {
yList.remove(o);
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例2:每个私有字段使用锁定对象
class Test {
private final Object xLock = …Run Code Online (Sandbox Code Playgroud)