Java Warteschlange?
while(scan.hasNextLine()) {
String line = scan.nextLine();
LabyMod.getInstance().displayMessageInChat(line);
LabyMod.getInstance().displayMessageInChat(amount);
if (line.startsWith(amount + ",")) {
LabyMod.getInstance().displayMessageInChat(line);
String[] datas = line.split(",");
String dataAmount = datas[0];
Double dataX = Double.parseDouble(datas[1]);
Double dataY = Double.parseDouble(datas[2]);
Double dataZ = Double.parseDouble(datas[3]);
String dataItem = datas[4];
boolean isStack = false;
String dataStackWarnMin = datas[6];
dropItem(dataX, dataY, dataZ, dataItem, isStack, Integer.valueOf(dataStackWarnMin), customer, amount);
break;
}
}
Ich programmiere eine Modifikation für Minecraft. Bei einer Situation soll er den oben genannten Code ausführen. Allerdings darf dieser Code nur maximal 1x alle 3 Sekunden ausgeführt werden. Dieser Code ist eine Methode.
Sollte durch eine Situation diese Methode 2x aufgerufen werden, soll sie hintereinander mit einem Abstand von 3 Sekunden ausgeführt werden.
Wie mache ich das?
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Java
In meinem Beispiel nenne ich deine Methode yourFunc.
So ginge es:
Deine Klasse braucht folgende Attribute:
int waitingForExecution = 0;
long lastExecuted = 0;
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
Und dann fügst du einfach noch folgende Funktion ein:
public void callYourFunc() {
if (waitingForExecution <= 0 && lastExecuted < System.currentTimeMillis() - 3000) {
yourFunc();
lastExecuted = System.currentTimeMillis();
} else {
executor.schedule(()->{
waitingForExecution--;
yourFunc();
}, lastExecuted+3000-System.currentTimeMillis() + waitingForExecution++*3000, TimeUnit.MILLISECONDS);
}
}
Fertig.
Anstatt deine Funktion direkt aufzurufen kannst du jetzt einfach immer callYourFunc() aufrufen. Das kümmert sich dann um die verzögerte Ausführung.
Woher ich das weiß:eigene Erfahrung – Minecraft-Experte. Aktiver Spieler seit 2011.