等待侦听器完成
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】:
由于这是概念性的,很难确定确切的答案,我建议阅读Locks
和Conditions
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html。这些可能会提供您正在寻找的功能。
【讨论】:
【参考方案2】:您可以考虑使用额外的监听器:
foo()
可以将 PropertyChangeListener 添加到您的“侦听器”正在更改其状态的任何内容中,我们将其称为模型。
然后让模型在完成其任务时通过在 PropertyChangeSupport 上触发通知方法通知 foo 其状态已更改。..
然后 foo 可以在完成其操作后移除其侦听器..
【讨论】:
以上是关于等待侦听器完成的主要内容,如果未能解决你的问题,请参考以下文章