1

属性的延迟初始化似乎是 JavaFX 中一种常见的设计模式。例如,OpenJFX Labeled 实现包含以下代码片段:

public final StringProperty textProperty() {
    if (text == null) {
        text = new SimpleStringProperty(this, "text", "");
     }
     return text;
}

鉴于可以从 JavaFX UI 线程以及其他潜在的客户端线程访问该属性,并且此实现不是线程安全的,这似乎是一个错误。考虑到该模式的使用频率,这要么是一个非常严重的问题,要么访问控件上的属性并不是线程安全的(我误解了 JavaFX 并发策略)。

谁能解释不使延迟初始化线程安全的理由?

4

1 回答 1

5

JavaFX 不是线程安全的,它像 Swing 一样是线程受限的。事实上,如果您不从 JavaFX 线程中使用它,JavaFX API 中的许多方法都会抛出异常。

于 2012-11-30T20:02:52.353 回答