public class Test implements Runnable {
A a = new A();
B b = new B();
Test() {
Thread.currentThread().setName("MainThread");
new Thread(this).start();
System.out.println("track after start");
a.foo(b);
System.out.println("back in main thread");
}
public void run() {
System.out.println("track in run");
Thread.currentThread().setName("RacingThread");
b.bar(a);
System.out.println("back in other thread");
}
public static void main(String[] args) {
new Test();
}
}