说,我有一个包装Queue对象的SystemQueue类。我使用systemQueue.add(无论如何)添加到此队列,并且我有一个不同的对象,一个Runnable检查队列,如果它不为空,则从队列中取出并使用"无论什么"在其代码中。有没有办法做到这一点,除了在运行中有无限循环,如
run(){
while(true){
if(!systemQueue.isEmpty()){
todo
}
}
}
并永远运行? 我要问的是,如何在java中使用基于事件的编码进行编码?
有没有办法可以将eventListener添加到SystemQueue内的队列中,如果队列发生变化,请调用SystemExecutor并让它运行?
答案 0 :(得分:1)
Queue
本身不提供该选项。您可以实现自己的侦听器/事件对。
事件:
public class SystemEvent extends java.util.EventObject{
public SystemEvent(SystemQueue src){
super(src);
}
public SystemQueue getSource(){
return (SystemQueue) super.getSource();
}
}
监听器:
public interface SystemListener extends java.util.EventListener{
public void eventQueued(SystemEvent e);
}
SystemQueue中的:
ArrayList<SystemListener> listeners = new ArrayList<>();
protected void fireEventQueued(){
SystemEvent e = new SystemEvent(this);
listeners.forEach(l -> l.eventQueued(e));
}
public void addSystemListener(SystemListener l){
listeners.add(l);
}
public void add(something){
//add something
fireEventQueued();
}
现在你需要做的就是让SystemExecutor实现SystemListener
并将实例添加为监听器。