【问题标题】:Wait for listener completion等待侦听器完成
【发布时间】:2013-09-10 03:13:26
【问题描述】:

我将在这里纯粹谈论概念。

我有一个类,它附有一个监听器,它执行某事。 我有一整套从该类构造的对象

我还有一个静态方法foo() 访问该数组,然后执行其他操作

其他事情会触发监听器,如果我不暂停其他事情直到 某事完成了,代码不起作用。 foo() 知道监听器何时被触发。

此外,侦听器具有直接调用由同一类构造的另一个对象上的侦听器的能力。 foo() 不知道这是否会发生,或者发生多少次。

那么如何强制foo() 等待侦听器执行,然后,如果侦听器没有触发连锁反应,则从中断处继续,或者等待任何触发的侦听器完成执行?

【问题讨论】:

  • wait for any triggered listener to finish executing - 这意味着触发的侦听器不是作为方法调用执行,而是以某种并行方式执行 - 作为线程、线程池上的 Runnable/Callable 或其他方式。但是你没有描述听众的性质。如果我们不知道该等待什么,我们怎么能说如何等待?

标签: java concurrency


【解决方案1】:

由于这是概念性的,很难确定确切的答案,我建议阅读LocksConditions http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html。这些可能会提供您正在寻找的功能。

【讨论】:

    【解决方案2】:

    您可以考虑使用额外的监听器:

    • foo() 可以将 PropertyChangeListener 添加到您的“侦听器”正在更改其状态的任何内容中,我们将其称为模型。
    • 然后让模型在完成其任务时通过在 PropertyChangeSupport 上触发通知方法通知 foo 其状态已更改。..
    • 然后 foo 可以在完成其操作后移除其侦听器..

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2021-10-11
      • 2023-03-28
      • 2021-08-02
      • 2012-08-03
      • 2015-11-06
      相关资源
      最近更新 更多