EventListener或显式无限循环

时间:2016-05-01 17:43:57

标签: java events

我在无限循环中有代码,检查是否可以访问特定的IP地址。如果IP地址可达,则执行某些逻辑(例如发送电子邮件)。所有这些都存在于一个无限循环中,它在一个单独的线程中运行(意味着这样做)。

问题:这应该保持原样,即保持代码无限运行在自己的线程中还是我应该创建一个EventListener?我之所以感到困惑的原因是因为即使我创建了一个EventListener,我还是需要继续检查IP地址是否可以访问,这必须是无限循环,对吗?

编辑:根据要求(@M.Surland),示例代码如下:

public class FindingIP {

// The creating thread will actually be part of a servlet call
public static void main(String[] args){
 // do something....
 //creating thread to search for a device
 Thread findingIPAliveThread = new Thread(new FindingIPAlive());
 findingIPAliveThread.start();
 // do something....
  }
 }



public class FindingIPAlive implements Runnable {
@Override
public void run() {
    while(true) {
    try {
        InetAddress ip = InetAddress.getByName("xxx.xxx.xxx.xxx");
        if (ip.isReachable(2000))
            //do some action
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

}

正如@Dawnkeeper所提到的,我也尝试过如下触发:

FindingIPAlive findIP = new FindingIPAlive();
ScheduledExecutorService taskExecutor = Executors .newScheduledThreadPool(1);
taskExecutor.scheduleWithFixedDelay(findIP, 0, 10, TimeUnit.SECONDS);

但我很想知道在这种情况下是否可以创建EventListener,如果是,则应该创建它。

1 个答案:

答案 0 :(得分:0)

我对使用无限循环没有任何负面看法。

更清洁的替代方案可能是:

void java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)

文档请参阅here