有没有办法在Java中使用变量的事件?里面的例子

时间:2015-04-22 02:15:27

标签: java multithreading performance queue runnable

说,我有一个包装Queue对象的SystemQueue类。我使用systemQueue.add(无论如何)添加到此队列,并且我有一个不同的对象,一个Runnable检查队列,如果它不为空,则从队列中取出并使用"无论什么"在其代码中。有没有办法做到这一点,除了在运行中有无限循环,如

    run(){
        while(true){
            if(!systemQueue.isEmpty()){
                  todo
             }
       }
   }

并永远运行? 我要问的是,如何在java中使用基于事件的编码进行编码?

有没有办法可以将eventListener添加到SystemQueue内的队列中,如果队列发生变化,请调用SystemExecutor并让它运行?

1 个答案:

答案 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并将实例添加为监听器。