我有两个线程可以访问一个对象。使用同步(a),我在对象a上提供锁,所以现在每次线程都可以访问对象“a”并修改它。如果执行此代码,我们有1 2。有时没有同步块我们得到2 2。(线程 t1 得到 i 并增加 i 现在线程 t2 得到 i 并增加然后线程 t1 得到 i 并打印 2,线程 t2 也得到 i 并打印 2)如果我是真的为什么我们不能使用同步(这个)而不是同步(一个)?
public class Foo {
public static void main(String[] args) {
B b =new B();
b.start();
}
}
class B{
A a = new A();
Thread t1 =new Thread(new Runnable(){
public void run(){
synchronized(a){
a.increment();
}
}
});
Thread t2 =new Thread(new Runnable(){
public void run(){
synchronized(a){
a.increment();
}
}
});
public void start(){
t1.start();
t2.start();
}
}
class A{
int i = 0;
public void increment() {
i++;
System.out.println(i);
}
}