2016-05-01 33 views
0

Ich habe Code in einer Endlosschleife, die überprüft, ob eine bestimmte IP-Adresse erreichbar ist. Wenn die IP-Adresse erreichbar ist, wird eine Logik ausgeführt (sagen wir E-Mail senden). All dies befindet sich in einer Endlosschleife, die in einem separaten Thread ausgeführt wird (um genau dies zu tun).EventListener oder explizite Endlosschleife

Frage: Sollte dies beibehalten werden, d. H. Den Code unendlich in seinem eigenen Thread laufen lassen ODER sollte ich einen EventListener erstellen? Der Grund, warum ich verwirrt bin, liegt darin, dass ich selbst dann, wenn ich einen EventListener erstelle, prüfen muss, ob die IP-Adresse erreichbar ist, die in einer Endlosschleife sein muss, richtig?

Edit: Wie gewünscht (. @M Suurland) ist der Beispielcode wie folgt:

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(); 
    } 
    } 
} 

} 

Wie @Dawnkeeper erwähnt, ich habe auch versucht, wie unten zu Triggern:

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

Aber ich war neugierig zu wissen, ob es in diesem Szenario möglich wäre, EventListener zu erstellen und falls ja, sollte es erstellt werden.

+0

nach den Code bitte –

+2

@ M.Suurland - Aktualisiert den obigen Code – srock

Antwort

0

Ich sehe nichts Negatives über die Verwendung einer Endlosschleife.

Eine sauberere suchen Alternative könnte sein:

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

Docs here siehe