JavaFX中属性的延迟初始化

ele*_*gin 1 java javafx javafx-2

似乎懒惰的属性初始化是JavaFX中常见的设计模式.例如,OpenJFX Labeled实现包含以下代码段:

public final StringProperty textProperty() {
    if (text == null) {
        text = new SimpleStringProperty(this, "text", "");
     }
     return text;
}
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以解释不使懒惰初始化线程安全的理由吗?

And*_*ill 5

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