Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen?

newnoise

Mitglied
Hallo,

ist es irgendwie möglich an jeglicher Stelle des Programms zu prüfen ob eine andere Methode gerade ausgeführt wird? Das läuft auf nem Java-Server sodass die Threads automatisch gehandelt werden.

Ich würde die Funktion gerne unter bestimmten Bedingungen abbrechen.

Danke
noise
 
Theoretisch könnte man über Flags feststellen, ob ein anderer Thread gerade innerhalb einer Methode steckt. Aber erzähl lieber mal was Du vorhast, da gibt's sicherlich bessere Lösungen für Deine Anforderung.
 
Also es handelt sich um ein Java-Server-Backend. Hier werden via HTTP-Request Berechnungen gestartet. Wenn nun ein Nutzer eine Anfrage sendet, soll zunächst geprüft werden ob die letzte Berechnung schon abgeschlossen ist. Ist sie es nicht möchte ich sie gern abbrechen.

Hat da jemand eine Idee?

Danke
noise
 
Hi,

sie ist threadsafe, das ist nicht das Problem. Es ist vielmehr ein Performance-Problem. Die Berechnung erstellt am Ende Bilder, die dann im Browser angezeigt werden. Sind noch sechs Anfragen zum Bildmalen offen, muss der Nutzer einfach lange warten und es wird einiges an Rechnkraft verschenkt.

Um zum einen möglichst wenig unnütze Bilder zu generieren (es kann immer nur ein Bild am Ende beim Nutzer angezeigt werden. Wenn er also viele Anfragen hintereinander schickt, würde sonst einige Bilder generiert die nie jemand zu sehen bekommt) und dadurch die Performance zu optimieren wäre es halt perfekt, wenn hier nicht unnötig weitergerechnet wird.

Derzeit laufen die verschiedenen Anfragen gar nicht in Extra-Threads, da ja eh nur eine Instanz pro Nutzer ausgeführt werden soll ...

Danke
noise
 
Ohne dass du etwas unternimmst (Flag setzen o.Ä.) kannst du nicht herausfinden ob ein bestimmter Code gerade ausfgeführt wird.

Es gibt da verschiedene Ideen, die aber auch erst mit Synchronisation sauber funktionieren.
z.B. Am Funktionsanfang eine static boolean setzen oder einen static counter hochzählen und am Ausgang wieder auf false setzen bzw. runterzählen ....
 
Also ich kriege es weder mit thread.interrupt, noch mit thread.stop (ich weiß, ist depr.) hin die Funktion zum anhalten zu überreden ...

Wie funktioniert denn so ein Java-Server-Backend? Wie verwaltet der mehrfache Anfragen von einem Klienten? Erkennt er den Klienten überhaupt wieder? Oder läuft jede Anfrage eh in einem eigenen Thread?

Danke
 
Hm du kannst einen Tread IMO nur bitten anzuhalten - ein flag setzten so im sinne von Stop = true;
Aber der Thread muss immer wieder prüfen ob er abbrechen soll.

Ich habe keine Ahnung von Server und Backend und weiss auch nicht ob man deine Frage allgemeingültig beantworten kann ...
 

Zurück
Oben