到目前为止,我已经看到了同步块的用法,但最近我了解到使用虚拟对象更好。我发现以下与此相关的主题。
Java同步方法锁定对象或方法?
总而言之,在下面的代码中,两个不同的对象不能同时运行 addA 和 addB,因为它们都使用 this 作为锁。
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
如果我使用虚拟对象进行锁定,我很困惑,如果我在两种方法中使用下面的行进行同步会有什么不同?因为他们仍然有相同的锁。
synchronized(dummyObject){
...
}
那么,我应该为每个方法使用两个不同的虚拟对象来与同步作为一起使用,这意味着什么?
public void addA(){
synchronized(dummyObj1){
a++;
}
}
public void addB(){
synchronized(dummyObj2){
b++;
}
}
这正是锁对象的要点——您可以对不同的操作使用不同的锁。假设运行有意义addA
and addB
并发地(从它的外观来看 - 确实如此),您确实应该有两个单独的锁,每个方法一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)