一方面,你是對的 - 問題不能由單獨的線程觸發,因爲JavaScript是單線程的。
回調事件肯定會由事件處理程序處理,該事件處理程序在當前事件處理程序(構建當前對象的處理程序)完成後啓動。所以他們只會看到完全構建的對象。
另一方面,您通常不需要線程來利用基本問題。這裏有一個簡單的例子:
final A a = new A();
final B b = new B(a);
public class A {
private B b;
public void setB(final B b) {
this.b = b;
}
public void letBSaySomething() {
b.saySomething();
}
}
public class B {
private A a;
private final int some;
public B(final A a) {
this.a = a;
a.setB(this);
a.letBSaySomething();
some = 55;
a.letBSaySomething();
}
public void saySomething() {
RootPanel.get().add(new Label("Hello " + some));
}
}
這將導致輸出
Hello 0
Hello 55
(雖然 '某些' 是最後的)。這在GWT(編譯/未編譯)和普通Java程序中都會發生。