在示例代码中
public class MsLunch {
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}
在这个页面上,
lock1和lock2正在控制c1和c2响应的更新。
然而,
synchronized(lock2)
正在获取对象lock1的锁并在同步块时释放它
synchronized(lock1) {
c1++;
}
被执行。
在执行此块时,该对象的成员c1上可能仍有更新——而且我看不到如何通过在代码中同步lock1来防止此更新。
对象lock1具有独占访问权限——除此之外没有其他(?)
那么,执行情况如何
public void inc1() {
synchronized(lock1) {
c1++;
}
}
在上面的代码中不同于
public void synchronized inc1() {
c1++;
}
甚至
public void inc1() {
synchronized(c1) {
//do something on c1
}
}
当c1是对象而不是原始对象时?
我在这里想念什么?
注:我看到了
和
在其他一些讨论中。