如果你声明该方法为synchonized(正如你通过键入public synchronized void addA()),你在整个对象上同步,所以两个线程访问一个不同的变量,从这个相同的对象将阻止对方。
如果你想一次只同步一个变量,那么两个线程在访问不同变量时不会相互阻塞,你可以在synchronized()块中分别进行同步。如果a和b是对象引用,您将使用:
public void addA() {
synchronized( a ) {
a++;
}
}
public void addB() {
synchronized( b ) {
b++;
}
}
但是因为他们是原始的,你不能这样做。
我建议你改用AtomicInteger:
import java.util.concurrent.atomic.AtomicInteger;
class X {
AtomicInteger a;
AtomicInteger b;
public void addA(){
a.incrementAndGet();
}
public void addB(){
b.incrementAndGet();
}
}