gpt4 book ai didi

multithreading - 在构造函数中进行 GWT 异步回调是否安全?

转载 作者:行者123 更新时间:2023-12-05 01:09:22 25 4
gpt4 key购买 nike

假设构造函数在代码的客户端部分运行(被转换为 javascript 的部分)。
回调方法 onSuccess 确实修改了类的实例变量。
回调是作为匿名类实现的,因此可以使用 OuterClass.this 访问外部类的实例。

通常在普通 Java 中我们不应该做这样的事情,因为这样做,'this' 引用可以在对象构造完成之前转义。

但它是否也适用于将 Java 代码转换为 Javascript 的情况?我假设 javascript 代码是由 Web 浏览器中的单个线程执行的,所以这应该不是问题(单线程 => 没有可见性问题)?

最佳答案

一方面,您是对的 - 问题不能由单独的线程触发,因为 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 程序中。

关于multithreading - 在构造函数中进行 GWT 异步回调是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com