【发布时间】:2014-11-15 18:51:23
【问题描述】:
在下面的代码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 对象或父类对象)。 请回答,因为我一直在努力理解同步块中使用的对象的作用。 同步块成员字段和变量是否必须由用于锁定的对象持有?
【问题讨论】:
-
还要注意,在单个对象的实例方法中使用多个锁对象可以使死锁更容易。
标签: java multithreading synchronized