Methode schützen vor nochmaligen Aufrufen

etchniker

Mitglied
Hallo,

ich habe eine Methode die in einem bestimmten Intervall immer wieder aufgerufen wird. Diese Methode führt Berechnungen durch, die je nach Umfang länger dauern können.
Das Problem ist nun, dass durch längere Berechnungen die Methode nicht abgeschlossen hat und gleichzeit ein erneuter Aufruf der Methode stattfindet. Das möchte ich unterbinden.
Der nächste Aufruf soll warten, falls die Methode nicht abgeschlossen hat und erst dann starten.

Mit synchronized kann man dass ja nicht erreichen, gilt ja für andere Threads und nicht fürs eigene.

Ich bitte um Rat. Danke schön.

Gruß
der etechniker
 
Zuletzt bearbeitet von einem Moderator:
Vllt probierst du es mit Rekursion?
Du merkst dir die Startzeit und berechnest aus dieser, die Zeit, zu der die Berechnung frühestens wieer gestartet werden soll.
Am Ende prüfst du, ob der Zeitpunkt zum nächsten Durchlauf schon gekommen ist. Wenn ja, dann ruft die Methode sich wieder selbst auf, wenn nicht, dann kann sie einfach warten bis der Zeitpunkt gekommen ist. (Thread.sleep(zeitpunkt - aktuelleZeit))
Dann solltest du das alles aber nochmal in einen Thread packen.
 
Natürlich macht man das so.

Der eine Thread wird die Methode nicht nochmal aufrufen, während er gerade eine Berechnung ind er Methode macht.

Das einzige Problem ist nur, wenn die Berechnungen nicht blockierend sind. Aber das geht aus deiner Beschreibung nicht hervor.

Gruß,

Martin

P.S. Mit Rekursion kann man hier nichts lösen.
 
Hallo,
Das Problem ist nun, dass durch längere Berechnungen die Methode nicht abgeschlossen hat und gleichzeit ein erneuter Aufruf der Methode stattfindet. Das möchte ich unterbinden.

Mit synchronized kann man dass ja nicht erreichen, gilt ja für andere Threads und nicht fürs eigene.

??...Wenn ich innerhalb einer Klasse eine Methode aufrufe, dann wird das Programm erst weiter fortgesetzt, wenn die Methode durch ist (beim gleichen Thread). Da kann es nicht sein, dass die Methode nochmal aufgerufen wird. Es sei dem die Methode wird in einem externen Thread ausgeführt, und dafür kannst du ja synchronized benutzen...
 
??...Wenn ich innerhalb einer Klasse eine Methode aufrufe, dann wird das Programm erst weiter fortgesetzt, wenn die Methode durch ist (beim gleichen Thread). Da kann es nicht sein, dass die Methode nochmal aufgerufen wird. Es sei dem die Methode wird in einem externen Thread ausgeführt, und dafür kannst du ja synchronized benutzen...

arrrrrr natürlich, DENKFEHLER, DANKE.
Hm dann hat mein Problem eine adere Ursache.
 

Neue Themen


Zurück
Oben