不可以访问同为synchronized的方法,例如下面的代码,会陷入死锁
import java.util.Random;
public class abstractClass extends Thread{
public static A a=new A();
public static B b=new B();
public abstractClass (){
new Thread(this).start();
b.say(a);
}
@Override
public void run() {
a.say(b);
}
public static void main(String[] args){
new abstractClass();
}
}
class A{
public synchronized void say(B b){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("A先生:把你的先给我");
b.give();
}
public synchronized void give(){
System.out.println("A先生:给你了,把你的给我把");
}
}
class B{
public synchronized void say(A a){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("B先生:把你的先给我");
a.give();
}
public synchronized void give(){
System.out.println("B先生:我的给你了,把你的给我吧");
}
}
将其中的一个函数修改为非synchronized方法后就可以进行调用,程序不会陷入死锁
public void give(){ System.out.println("A先生:给你了,把你的给我把"); }