感觉很好成为这个社区的一部分。已经阅读了很多答案,清除了我对许多问题的疑惑,但没有找到一个答案。我知道同步是如何在Java中工作的,但是当线程通过另一个类调用同步方法时,会发现错误的行为。线程通过另一个类调用同步方法时会发生什么?
PSB我试过的:
A类同步方法“meth1”。与非synhronized法 “meth2”
package threadinterview;
public class B {
public void meth2() {
A a1 = new A();
a1.meth1();
}
}
主要类
package threadinterview;
public class A {
public synchronized void meth1()
{
for(int i=0; i<3; i++)
{
System.out.println("meth1: " + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("Interrupted: " + Thread.currentThread().getName());
}
}
}
B级在这种情况下运行该项目
package threadinterview;
public class ThreadImpl {
public static void main(String[] args) {
final B b1 = new B();
final B b2 = new B();
new Thread(new Runnable() {
@Override
public void run() {
b1.meth2();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
b1.meth2();
}
}).start();
}
}
现在,即使我最终运行同步方法,我看不到同步的效果。在这里我所得到的,当我运行程序:
meth1: Thread-0
meth1: Thread-1
meth1: Thread-0
meth1: Thread-1
meth1: Thread-0
meth1: Thread-1
而且,如果我做了synchronized方法静态为好,然后我得到了一流水平锁,可以看到的地方同步效果。我严重不明白为什么类级锁定工作,但在这种情况下对象级别不起作用。
明白了。不难,但没有点击。万分感谢。 :) – user3384573