スレッドに慣れていません。私は今、私は、Runnableインタフェースを実装して他の二つのクラスを作成したフォローJavaでのスタックオーバーフロー例外
public class A {
private B b;
public void setB(B b) {
this.b = b;
}
synchronized void foo() {
b.foo();
System.out.println("Hi A");
}
}
public class B {
private A a;
public void setA(A a) {
this.a = a;
}
synchronized void foo() {
a.foo();
System.out.println("Hi B");
}
}
ように2つのクラス名のAとBを作成しました。 mainメソッドで
public class AThread implements Runnable{
private A a;
public AThread(A a){
this.a = a;
}
@Override
public void run() {
a.foo();
}
}
public class BThread implements Runnable {
private B b;
public BThread(B a){
this.b = b;
}
@Override
public void run() {
b.foo();
}
}
私はこのコードを実行しているとき、私は以下のコード -
public static void main(String args[]) {
A a = new A();
B b = new B();
a.setB(b);
b.setA(a);
Runnable r1 = new AThread(a);
Runnable r2 = new BThread(b);
Thread t1 = new Thread(r1);
t1.start();
}
を書かれている、私は次の例外を得ました。
Exception in thread "Thread-0" java.lang.StackOverflowError
at student.B.foo(B.java:21)
at student.A.foo(A.java:21)..
どのような原因が原因であるのか、どのように解決できますか?
オブジェクトの 'foo()'メソッドを呼び出すと、無限の再帰呼び出しシーケンスが得られます。 –