在下面的代码snippet
中public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
// private Object lock2 = new Object();
private Dummy lock2 = new Dummy();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}
我更改了用于保护c2计数的锁定对象。我使用了一个虚拟类,它与MsLunch类无关。它是好还是我总是把锁放在当前类的对象(“this”或MsLunch对象或父类Object)上。 请回答,因为我一直在努力了解同步块中使用的对象的作用。 同步块成员字段和变量是否必须由用于锁定的对象保持?
答案 0 :(得分:0)
无论哪种方式都没问题。设计原因是将您的对象用作锁,并且有设计理由将锁保持为私有。
我唯一的批评是Object
通常被用作Java中的锁,你不必发明虚拟类。
public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}