Ergebnis 1 bis 5 von 5

Thema: [Java] Zeitgesteuerte Threads abbrechen

  1. #1

    [Java] Zeitgesteuerte Threads abbrechen

    Moin,

    Der Titel ist vielleicht ein bisschen irreführend, aber ich versuch mal die Situation zu erklären:
    Ich möchte gern eine Aufgabe zeitgesteuert und periodisch alle 10 Minuten ausführen. Dies kann man ja im Prinzip leicht mit den Klassen Timer und TimerTask implementieren.
    Allerdings hab ich nun das Problem, dass die Aufgabe länger als 10 Minuten dauern kann. Durch die Synchronisierung der einzelnen Threads passiert es nun, dass neue Threads erst auf einem Stack landen und dann abgearbeitet werden. Also:

    - Thread A wird gestartet
    - Thread B wird nach 10 Minuten gestartet
    - Thread B wird in den Stack geladen, da Thread A noch läuft
    - Thread A ist fertig
    - Thread B wird gestartet

    Ich möchte aber, dass Thread B sofort beendet wird, wenn Thread A noch läuft, weil es dazu führen könnte, dass nun zig Threads in den Stack geladen werden.

    Hat da jemand vielleicht eine Idee, wie man dies hinbekommen könnte? Ich hab schon versucht was über Google in Erfahrung zu bringen, aber die Ergebnisse waren doch recht mau.
    Einfach die Zeitspanne vergrößern ist auch keine Option, da man die Aufgabe dynamisch erweitern kann.

  2. #2
    Ich denke, du willst einen Stack, der gewissermassen nur 1 wartende Aufgabe dieses Typs halten kann?
    Keine Ahnung, ob das in dein Design passt, aber wäre das einfachste nicht am Anfang 1 Thread zu erstellen welcher folgendes ausführt?
    Code:
    time = Now();
    while(boolNotDeleted){
       while(time - Now() < 10 min){
          Thread.Sleep(Now() - time);
       }
       time = Now();
       
       do some stuff here
    }
    Edit: meinte
    Code:
    while(Now() - time < 10 min){
          Thread.Sleep((10 min+time) - Now());
       }

    Geändert von Drakes (20.11.2011 um 19:58 Uhr)

  3. #3
    Ich würd auch sagen, du wartest ein bis Thread A beendet ist und startest dann erst den nächsten Thread. Du blockst halt solange

  4. #4
    Zitat Zitat von R.D. Beitrag anzeigen
    Ich würd auch sagen, du wartest ein bis Thread A beendet ist und startest dann erst den nächsten Thread. Du blockst halt solange
    ok.
    So in etwa hab ich das auch nun gemacht, wobei ich doch lieber so ne Art Manager gehabt hätte, wie den Timer.

  5. #5
    Manchmal tut es auch KISS Ich würde damit auch erst mal arbeite so lange das natürlich nicht deinem Design widerspricht.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •