# Verschachtelte Schleifen abbrechen



## tobi193 (18. Dez 2009)

Hallo,
ich habe in einem Thread eine Endlosschleife und darin befindet sich ein kleiner Unterthread, in dem ist nun auch wieder eine Endlosschleife. In der will ich meine Hauptschleife abbrechen. Aber nur für den aktuellen Durchgang, danach soll sie wieder starten.

```
private long time;
public void run(){
        // Schleife 1
        while(true){
                  time = System.currentTimeMillis() + 3000;
                  Thread th = new Thread(){
                    public void run(){
                        // Schleife 2
                        while(true){
                            if(time < System.currentTimeMillis()){
                                // Hier soll Schleife 1 abgebrochen werden, Schleife 2 wird dann ja auch nicht mehr gebraucht
                                break;
                            }
                            try{
                                Thread.sleep(50);
                            }catch(Exception eeee){}
                        }
                    }
                  };
                  th.start();
                 // Hier stehen ein paar Anweisungen, die sollen abgebrochen werden, wenn es länger als 3 Sekunden dauert, er soll    
                 // aber dann einen neuen Schleifendurchlauf starten
            continue;
        }
```


----------



## javimka (18. Dez 2009)

Wenn du th.start() aufrufst, läuft die Schleife im run() in einem anderen Thread. Damit hast du keine direkte Kontrolle mehr über den alten Thread, der die äussere Schleife ausführt.


----------



## Meldanor (18. Dez 2009)

Du kannst Schleifen mit einem Namen versehen:

```
one:
while(true){
...
two:
while(true){}
...
}
```

und dann per 

```
break one;
```

oder

```
break two;
```

die jeweilige Schleife verlassen.
Eventuel hilft dir das dabei


----------



## Ein Keks (19. Dez 2009)

@Meldanor labels helfen da nix und sollten generell vermieden werden
@tobi193 wozu soll das überhaupt gut sein hört sich für mich nach falschem konzept an. Zugriff auf die Schleifen hättest du theoretisch indem du nicht while(true) machst sondern while(isRunning) oder ähnliches also das ganze von einem boolean abhängig machst. Aber was solln überhaupt die schleifen wenn du sie eh abbrechen lassen willst und warum erzeugst du nen Thread der nen Thread erzeugt ???:L
sag am besten mal was du überhaupt machen willst...


----------

