我在无限循环中有代码,检查是否可以访问特定的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,如果是,则应该创建它。
答案 0 :(得分:0)
我对使用无限循环没有任何负面看法。
更清洁的替代方案可能是:
void java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)
文档请参阅here