# TimerTask ein Thread beenden



## Andron (27. Februar 2007)

Hallo,
ich habe folgende Ausgangslage:



```
class Test
{

     Timer timer;
     Task[] tsk = new Task[5];

     public Test
     {
          timer = new Timer();
     } 
     
     public void starteTasks()
     {
          for (int i=0;i<tsk.lenght;i++)
          {
               this.timer.schedule(tsk[i], restZeitMill, inter);
          }
     }
}


class Task extends TimerTask
{
     run()
     {
           // tu was
     }
}
```

Beim Aufruf der Methode starteTasks() werden alle Tasks gestartet, es laufen also x Threads.
Nun möchte ich zu einem Zeitpunkt einen bestimmten Thread zerstören.
Z.B. tsk[3] soll aus dem Array entfernt werden.
Wie mache ich das am besten?

```
tsk[3] = null;
```
würde das reichen?
Was, wenn der Thread tsk[3] noch gar nicht gestartet wurde?
Muss ich, nachdem der tsk[3] entfernt wurde auch das Array neu aufbauen und die starteTasks() neu aufrufen?
Das wäre ja nicht gut, denn zu dem Zeitpunkt könnten einige Tasks schon am Laufen sein.

Hat jemand eine Idee?
Danke.


----------



## Andron (1. März 2007)

Brauche immer noch Hilfe...


----------



## Thomas Darimont (1. März 2007)

Hallo,

wenn du einen Task überspringen willst der noch nicht gestartet wurde reicht ein Aufruf von chancel(). (Dadurch wird der Task bei einem schedule(...) Aufruf am Timer einfach ignoriert).
Läuft der Task schon, so kann man nicht einfach den Thread abbrechen (das ginge schon in den man den entsprechenden Thread sucht und dann via interrupt() unterbricht... das Problem dabei ist jedoch dass das an jeder Stelle in dem Task passieren kann). Eine bessere Variante ist IMHO die, an geeigneten Stellen des Tasks auf entsprechende Flags zu Prüfen und die Bearbeitung dann entsprechend kontrolliert abzubrechen.

Gruß Tom


----------

