# Thread nach x Sekunden beenden ...



## Gelöschtes Mitglied 23438 (13. Jul 2010)

Nabend,

ich hänge hier gerade an einen kleinem Problem fest - und zwar ich möchte 2 Threads starten - diese laufen in einer Threadgroup und zählen Zahlen nach oben und tauschen diese untereinander aus ...

Ich möchte diese beiden Threads jetzt nach x sekunden (z.B. 5) beenden.

Das ganze muss ich ja mit interrupt() machen, oder?
Wie implementiere ich diese 5 sekunden?
ich kann ja nicht einfach ne x variable von 0-5 hochzählen lassen - das sind ja keine echten 5 sekunden dann.

Hat da einer ne Idee und kann mir helfen?
Greetz Skinwalker


----------



## hemeroc (13. Jul 2010)

Das einfachste wäre wohl in dem Thread der die anderen beiden beenden soll ein 
	
	
	
	





```
Thread.sleep(5000);
```
 zu machen.
Allerdings sehe ich bei deinem Vorhaben noch ein Grundsätzlicheres Problem, ein interrupt beendet einen Thread nicht. Er wirft in dem interrupteten Thread eine InterruptException sollte dieser sich im blocked Zustand befinden. Anderenfalls wird lediglich der Status auf interrupted gesetzt das müsstest du dann mit 
	
	
	
	





```
Thread.isInterrupted();
```
 abfragen. Sprich bist du bei dieser Methode wiederum von der Implementierung des Threads den du stoppen willst abhängig.
Ich hoffe das war einigermaßen klar, solltest du noch fragen haben dann sag bescheid.
LG Hemeroc


----------



## XHelp (13. Jul 2010)

Hm... du könntest noch einen Thread starten, der zuerst für 5 Sekunden einschläft und dann die beiden Threads terminiert.

[EDIT]Mist, das passiert wenn man zuerst ein Haufen Fenster öffnet und die dann nach und nach beantwortet.[/EDIT]


----------



## Gelöschtes Mitglied 23438 (13. Jul 2010)

Hmm also das ist alle nicht so wirklich das was ich suche.

Ich habe 3 Klassen - die ThreadKlasse (in der die Threads gestartet werden) eine Generator- und eine VerarbeiterKlasse (welche dann parallel als Thread laufen sollen).

Ich starte nun die 2 ThreadKlassen und möchte das diese nach einer gewissen Zeit sich beenden ... z.B. eben 5 ... kann ich nicht irgendwo in Java eine Zeitvariable mitlaufen lassen, welche dann einfach checkt ob ich schon bei 5000 ms bin?


----------



## Michael... (13. Jul 2010)

Was machen die Threads? Kann man die 5 Sekunden nicht als Abbruchbedingung in den Threads aufnehmen?


----------



## Gelöschtes Mitglied 23438 (13. Jul 2010)

Der Generatorthread zählt einfach Zahlen hoch und der Verwaltungsthread nimmt sie entgegen und verarbeitet sie.

Ja man könnte es auch in die Threads selber aufnehmen - aber kann ich das nicht über die Controllerklasse machen? In welcher ich die Threads ja anlegen?


----------



## Michael... (13. Jul 2010)

Skinwalker hat gesagt.:


> Der Generatorthread zählt einfach Zahlen hoch und der Verwaltungsthread nimmt sie entgegen und verarbeitet sie.


Dann könntest Du dem Generatorthread, ja einfach sagen, dass wenn seit dem Start mehr als 5000 ms rum sind, er aufhören soll hoch zu zählen.

```
long start = System.currentTimeMillis();
while(System.currentTimeMillis() - start <= 5000) {
   //zähle hoch und mach sonst was
}
```
Arbeiten die beiden Threads auf einer gemeinsamen Queue oder wie meinst Du das mit "der Verwaltungsthread nimmt sie entgegen"?


----------



## Gast2 (13. Jul 2010)

Skinwalker hat gesagt.:


> Das ganze muss ich ja mit interrupt() machen, oder?


nein - Threads müssen Selbstmord begehen ... wie Du den Generator-Thread zu einem Selbstmord überzeugst hast Du ja schon ... beim anderen Thread geht es vom Prinzip her genau so


```
while(!ende)
{
    // ... Thread abarbeiten
}
```

hand, mogel


----------



## Gelöschtes Mitglied 23438 (14. Jul 2010)

Hab ne lösung gefunden ...

in der ControllKlasse welche die Threads startet hab ich einfach en Thread.sleep(x); gemacht - danach mach ich dann en interrupt auf die Threadgroup. So gehts.

Danke an alle Antworten.
Gruß Skinwalker


----------

