Create Runnable/Schedular in Java?
Hallo, ich probiere derzeit einen Schedular zu machen der jede Sekunde ausgeführt wird bis halt der Schedular gecancelt wird.
Bis jetzt hatte ich das immer mit der Bukkit API gemacht (also für Minecraft Developement) und ohne diese API hab ich keine Ahnung wie das geht.
Kann mir jemand helfen?
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
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!
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)?
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);
}
}