Dlaczego w podanym kodzie nie wystepuje deadlock? Najpierw wywoluje i metode getC() i ja blokuje (podobno niejawnie, kluczem ktory jest tylko jeden na instancje) -> wywoluje metode z innej klasy, ktora wywoluje metode z pierwszej klasy, ktorej metoda getC() jest juz 'zablokowana' wiec jakim sposobem dostano sie do metody getC2(), skoro klucz jest aktualnie wykorzystywany przez getC()?
public class Main {
public static void main(String[] args) {
Foo foo = new Foo();
Foo2 foo2 = new Foo2(foo);
foo.setFoo(foo2);
System.out.println(foo2.getC());
}
}
class Foo2{
Foo foo;
public Foo2(Foo foo){
this.foo = foo;
}
public synchronized int getC(){
return foo.getB();
}
public synchronized int getC2(){
return 33;
}
}
class Foo{
private Foo2 foo2;
public synchronized int getB(){
return foo2.getC2();
}
public void setFoo(Foo2 foo2) {
this.foo2 = foo2;
}
}