我知道同步方法和同步块之间的区别,但我不确定同步块部分。
假设我有这个代码
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);
}
}
在这种情况下,使用有什么区别锁对象并使用this作为锁?看来我也一样啊。。
当你决定使用同步块时,你如何决定哪个对象是锁?
就我个人而言,我几乎从不锁定“这个”。我通常锁定一个私人持有的引用,我知道没有其他代码会锁定该引用。如果你锁定“这个”那么any了解您的对象的其他代码可能会选择锁定它。虽然这种情况不太可能发生,但它肯定会发生——并且可能导致死锁,或者只是过度锁定。
你锁定的东西并没有什么特别神奇的地方——你可以有效地将它视为一个令牌。任何使用相同令牌锁定的人都会尝试获取相同的锁。除非你want其他代码能够获取相同的锁,请使用私有变量。 IDalso鼓励你做出改变final
- 我不记得我曾经遇到过什么情况ever想要在对象的生命周期内更改锁定变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)