如果将方法声明为已同步(就像你通过键入进行的操作一样
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(); }}


