2017-12-16 7 views
0

Ich schreibe verteilte Netzwerk von Leistungsindikatoren und ich verwende scheduleAtFixedRate von ScheduledExecutorService-Klasse, um Pakete zwischen Computern im Netzwerk zu senden und aktuellen Wert des Leistungsindikators auf jedem Computer zu drucken synPeriod. Wenn ich den Befehl "set period [value]" eintippe, sollte der Zeitraum von scheduleAtFixedRate am [value] geändert werden. Ich aktualisiere den Wert der Periodenvariablen, aber keinen Einfluss auf den Zeitraum in scheduleAtFixedRate. Gibt es eine Möglichkeit, den Wert zu ändern, wenn es funktioniert? Oder besteht irgendeine Möglichkeit darin, den Executor zu stoppen und ihn dann mit einem anderen Zeitraum erneut aufzurufen?Wie Wert von Zeitraum für ScheduleAtFixedRate ändern, wenn Programm ausgeführt wird

Runnable printer =() -> { 
     try 
     { 
      //send packet with value of counter 
      Thread.sleep(200); 
     } 
     catch (IOException e) 
     { 
     } 
     catch (InterruptedException e) 
     { 
     } 
     System.out.println("Counter value: " + counter); 
    }; 
ScheduledExecutorService printerExecutor = Executors.newScheduledThreadPool(1); 
    printerExecutor.scheduleAtFixedRate(printer, synPeriod, synPeriod, TimeUnit.SECONDS); 

EDIT: Ich habe gelesen, dass ScheduledFuture nützlich wäre, und es funktioniert !.

Antwort

0

Sie haben, um die Aufgabe abzubrechen eine Umschuldung mit erforderli- chen Wert

+0

Danke, aber könnten Sie mir sagen, wie es zu stornieren? Ich habe versucht, ScheduledFuture zu verwenden, aber es scheint, als ob nichts passiert. –

+0

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html Es hat Abbrechen-Methode. Eine abbrechbare Zukunft wird von "scheduleAtFixedRate" während der Planung der Aufgabe zurückgegeben – Antoniossss

Verwandte Themen