Create Runnable/Schedular in Java?

2 Antworten

Du könntest eine for schleife machen, vorher den Zeitpunkt des "Eintritts" bestimmen und mit dem dann berechnen, wie lange die SChleife läuft, indem du die differenz aus dem aktuellen zeitpunkt und dem des "eintritts" berechnest.Wenn diese Differenz dann eine Sekunde beträgt, kannst du den Code ausführen, den du haben willst und dann den Eintritts-ZEitpunkt zur aktuellen Zeit setzen und das ganze dann wieder holen.also etwa so:

Variable: Eintritt, aktueller zeitpunkt
ANFANG SCHLEiFE
Ist die Differenz aus dem aktuellen Zeitpunkt und der Variable Eintritt gleich 1 sek?
Ja: Code + Setze Variable Eintitt zur aktuellen Zeit
Nein: Lasse die Schleife normal weitealaufe
ENDE SCHLEIFE

Natürlich würde ich auch Bedingungen einbauen, die die Schleife beenden

Woher ich das weiß:Hobby

Ja, es ist möglich, einen Scheduler in Java zu erstellen, der jede Sekunde ausgeführt wird, bis er cancel wird. Dazu können Sie die java.util.concurrent.ScheduledExecutorService-Klasse verwenden, die in der Java Standard Library enthalten ist.

Hier ist ein Beispiel, wie Sie einen Scheduler erstellen können, der jede Sekunde eine Aufgabe ausführt:

// Erstelle einen ScheduledExecutorService mit einem Thread-Pool von 1 Thread
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);


// Definiere die Aufgabe, die der Scheduler ausführen soll
Runnable task = new Runnable() {
  public void run() {
    // Hier kommt der Code hin, den der Scheduler jede Sekunde ausführen soll
    System.out.println("Die Aufgabe wird ausgeführt!");
  }
};


// Scheduled die Aufgabe, um jede Sekunde ausgeführt zu werden
ScheduledFuture<?> future = executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);


// ...


// Wenn der Scheduler gestoppt werden soll, können Sie ihn canceln
future.cancel(true);

Ich hoffe das Hilft!


Marcus496 
Fragesteller
 07.12.2022, 21:30

Gibt es auch eine Möglichkeit in der task selbst des zu canceln (zum beispiel weil er da überprüft ob ein cooldown 0 ist und wenn ja dass er des halt selbst cancelt)?

1
Beantworter247  07.12.2022, 21:33

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

public class SchedulerExample {

 public static void main(String[] args) {

  ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

  // Führe die Aufgabe alle 1 Sekunde aus

  executor.scheduleAtFixedRate(new Runnable() {

   @Override

   public void run() {

    // Hier kommt der Code, der jede Sekunde ausgeführt werden soll

    // Prüfe, ob die Bedingung erfüllt ist, und schalte den Scheduler ab,

    // wenn dies der Fall ist

    if (/* Bedingung */) {

     executor.shutdown();

    }

   }

  }, 0, 1, TimeUnit.SECONDS);

 }

}

0