似乎懒惰的属性初始化是JavaFX中常见的设计模式。例如,OpenJFX Labeled implementation包含以下代码段:
public final StringProperty textProperty() {
if (text == null) {
text = new SimpleStringProperty(this, "text", "");
}
return text;
}
鉴于可以想象从JavaFX UI线程以及其他潜在客户端线程以及此实现is not thread safe访问该属性,这似乎是一个错误。鉴于模式的使用频率,这是一个非常严重的问题,或者访问控件上的属性并不是为了线程安全(我误解了JavaFX并发策略)。
任何人都可以解释不使懒惰初始化线程安全的理由吗?
答案 0 :(得分:5)
JavaFX不是线程安全的,它就像Swing一样受到线程限制。实际上,如果您不从JavaFX线程中使用它,JavaFX API中的许多方法都会抛出异常。