# Parameter an Thread übergeben



## tester (24. Mrz 2007)

Liebe Leute,

wenn ich einen Thread habe... Wo kann ich hier beim Konstrukten des Threads einen (oder mehrere) Parameter an ihn übergeben?

Ich danke euch!
MfG
tester


----------



## L-ectron-X (24. Mrz 2007)

Um einen Thread zu erzeugen, muss die jeweilige Klasse, die nebenläufige Arbeiten ausführen soll, von der Klasse Thread erben.

```
public class MeineKlasse extends Thread {
   private long millis;

   public MeineKlasse(long millis) {
      this.millis = millis;
   }

   [...]
}
```

Es gibt keine geeignetere Methode als den Konstruktor, um Parameter, die dem Thread-Objekt bei Instanziierung übergeben werden, in die Klasse zu bringen und in Instanzvariablen zu speichern. Auch die run()-Methode kann auf diese Parameter zugreifen.


----------



## Guest (26. Mrz 2007)

Hallo,

ich muss da grad mal einhaken...

ich hab ne Klasse mit zwei Konstruktoren, die beide Parameter erwarten. Innerhalb dieser Konstruktoren rufe ich einen Thread auf und da der Thread des einen Konstruktors etwas anderes macht als der zweite Konstruktor implementiere ich eine anonyme innere Methode Runnable().

Jaaaa... diese Methode greift aber auf die bergebenen Parameter des Konstruktors zu. Und genau das mag der Thread nicht. Er zwingt mich die Parameter finale zu setzten.

Nun die Frage: warum muss ich das machen und geht es auch anders?

hier ein Beispiel:


```
public class ThreadTest {
  
  protected ThreadTest (Object test) {
    new Thread (
      new Runnable () {
        public void run () {
          //mache Sachen mit test
          System.out.println ( test );
        }
      };
    }
  }.start ();

}
```


----------



## scheffield (26. Mrz 2007)

huch... das war eben ich und der Code muss auch so aussehen:


```
public class ThreadTest {
 
  protected ThreadTest (final Object test) {
    new Thread (
      new Runnable () {
        public void run () {
          //mache Sachen mit test
          System.out.println ( test );
        }
      };
    }
  }.start ();

}
```


----------



## Leroy42 (26. Mrz 2007)

Das final ist deshalb notwendig, weil du ja in Wirklichkeit, keine
parametrisierten inneren Klassen zur Laufzeit erzeugen kanns.

Es gibt nach dem Kompilat eben nur EINE innere Klasse.

Was spricht denn dagegen, dein Object als final zu deklarieren?  ???:L


----------



## SlaterB (26. Mrz 2007)

aber diese Klasse wird doch für jeden neuen Operationsaufruf mit anderem Parameter neu/ individuell erstellt?


----------



## scheffield (26. Mrz 2007)

Ok, das mit dem final funktioniert ja auch, aber der Parameter ist ein HashMap aus Objecten die sich verändern... auch wärend der Thread läuft, nun weiß ich nicht, ob die Objecte eines final gesetzten HashMaps noch den Änderungen unterlegen sind oder nicht...  ???:L


----------



## SlaterB (26. Mrz 2007)

sind sie, könntest du auch mal eben testen..


----------



## scheffield (26. Mrz 2007)

Stimmt! Ich danke!


----------

