我知道同步方法和同步块之间的区别,但我不确定同步块部分.
假设我有这个代码
class Test {
private int x=0;
private Object lockObject = new Object();
public void incBlock() {
synchronized(lockObject) {
x++;
}
System.out.println("x="+x);
}
public void incThis() { // same as synchronized method
synchronized(this) {
x++;
}
System.out.println("x="+x);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使用lockObject和使用它作为锁有什么区别?对我来说似乎是一样的..
当您决定使用synchronized块时,如何确定哪个对象是锁?
看到这个答案.它说:
六个非常糟糕的例子;
...
锁定可变字段.例如synchronized(object){object = ...; }
锁定可变字段有什么问题?如果object被声明为final但不是不可变类?