JavaFX属性监听器排序

时间:2013-12-15 23:17:15

标签: java javafx

如果我将onChange侦听器添加到JavaFx属性

  1. 是否按顺序调用了侦听器?如果我有一个字符串属性,然后我的字符串为“Alice”,然后是“Bob”,我保证在看到“Bob”之前看到“Alice”。实际上,只要我看不到“鲍勃”后我就不在乎我是否看到“爱丽丝”
  2. 是否按顺序调用了侦听器?是否有可能同时通过“Alice”和“Bob”通知调用我的监听器?

1 个答案:

答案 0 :(得分:2)

注意:您的问题不明确 - 您似乎在询问观察事件的顺序,而不是调用侦听器的顺序(在您的示例中只有一个侦听器)。我会回答活动订购部分。

长话短说:FX属性不是线程安全的。只要您在FX线程中处理该属性,就会按顺序触发事件,但是如果您从其他线程访问该属性,则应用线程安全的一般规则。

换句话说:

  • 如果只在FX线程上访问该属性(控件属性因用户交互而发生变化),包括注册监听器或者以编程方式设置属性值,则事件将为在FX Thread上触发并将按顺序显示。因此,如果用户键入Alice然后Bob,则您的听众将收到Alice,然后是Bob。
  • 如果您手动创建属性或更新控件的属性但是在没有正确同步的情况下开始播放线程,则所有投注都将关闭。特别是,如果你写:

      线程A中的
    • property.addListener(myListener)
    • 线程B中的
    • property.set("Alice")
    • 线程C中的
    • property.set("Bob")

    您的听众可能会或可能不会看到“Alice”,它可能会也可能不会看到“Bob”。它实际上可能看到“Alice”而不是“Bob”,它可能看到“Bob”而不是“Alice”。