等待侦听器完成

Posted

技术标签:

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

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

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

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

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

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

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

【问题讨论】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于等待侦听器完成的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8 - 等待 Task<Bool> - 需要对已完成的侦听器进行异步回调

等待监听器完成内部循环[复制]

Vue 功能,在运行函数之前等待组件完成重新渲染

在执行代码之前等待 Swift 动画完成

闩锁(用于等待异步响应)冻结 WebView(和 UI)

javaweb,监听器和定时器(Quartz)互相调控的问题