2012-11-30 109 views
1

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

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

鉴于财产令人信服从JavaFX的UI线程以及其他潜在的客户端线程,而这个实施is not thread safe访问,这似乎是一个错误。考虑到模式的使用频率,这是一个非常严重的问题,或者访问控件上的属性并不是线程安全的(我误解了JavaFX并发策略)。

任何人都可以解释不进行懒惰初始化线程安全的基本原理吗?

回答

5

JavaFX不是线程安全的,它像Swing一样受线程限制。实际上,如果您不从JavaFX线程使用它,JavaFX API中的许多方法将引发异常。

+0

谢谢!现在我已经做了更多的挖掘,我可能应该[RTFM](http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm)......哈哈。 – elecengin