Ale*_*bbe 1 java multithreading synchronized
我试图找出同步方法的工作原理.根据我的理解,我创建了两个线程T1和T2,它们将调用相同的方法addNew,因为该方法是同步的,它不应该执行一个线程的for循环的所有迭代,然后另一个?输出保持不变,有时它会正确打印,有时它会打印T1与T2值混合的值.代码很简单,有人可以指出我做错了什么吗?谢谢.
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new A());
Thread t2 = new Thread(new A());
t1.setName("T1");
t2.setName("T2");
t1.start();
t2.start();
}
}
public class B {
public synchronized void addNew(int i){
Thread t = Thread.currentThread();
for (int j = 0; j < 5; j++) {
System.out.println(t.getName() +"-"+(j+i));
}
}
}
public class A extends Thread {
private B b1 = new B();
@Override
public void run() {
b1.addNew(100);
}
}
Run Code Online (Sandbox Code Playgroud)
每个A实例都有自己的B实例.该方法addNew是一种实例方法B.因此,在调用期间隐式获取addNew的锁是对接收器B实例的锁定.每个线程都调用addNew不同的B,因此锁定不同的锁.
如果您希望所有 B实例都使用公共锁,请创建一个共享锁,并在其中获取它addNew.