属性的延迟初始化似乎是 JavaFX 中一种常见的设计模式。例如,OpenJFX Labeled 实现包含以下代码片段:
public final StringProperty textProperty() {
if (text == null) {
text = new SimpleStringProperty(this, "text", "");
}
return text;
}
鉴于可以从 JavaFX UI 线程以及其他潜在的客户端线程访问该属性,并且此实现不是线程安全的,这似乎是一个错误。考虑到该模式的使用频率,这要么是一个非常严重的问题,要么访问控件上的属性并不是线程安全的(我误解了 JavaFX 并发策略)。
谁能解释不使延迟初始化线程安全的理由?