# Wie einem Thread ein Objekt übergeben



## nipnip (8. Jul 2008)

Hallo!

Ich möchte in einem Thread parallel zum Hauptprogramm etwas berechnen lassen, dazu benötige ich jedoch ein Objekt des Hauptprogramms...wie kann ich diese Objekt - oder Objekte allgemein - an einen Thread übergeben, damit dieser damit arbeiten kann?

Ich habe dazu bei Google und über die Suche nichts gefunden...

Gruß nipnip


----------



## SlaterB (8. Jul 2008)

so wie du jedes Objekt in jeder beliebigen Java-Operation übergibst:

public void doSomething(Object thingYouNeed) {
....
}

+

xy.doSomething(anObject);


----------



## Atze (8. Jul 2008)

oder dir eine getter-methode dafür schreibst und dir das objekt selber im thread holst


----------



## musiKk (8. Jul 2008)

Oder wenn jeder Thread so ein Objekt (bzw. eine Referenz darauf) haben soll, dann in den Konstruktor damit.


----------



## nipnip (8. Jul 2008)

hm...ich bekomms net hin...

mein source:



```
//Erzeuge LogScanThread
		LogScanThread parallelLogScan = new LogScanThread();
		parallelLogScan.start();
```


```
public class LogScanThread extends Thread{

	public void run(Object a){
		a.getName();
	}
```

Ich muss doch eigentlich bei parallelLogScan.start() das Objekt in Klammern übergeben oder? also parallelLogScan.start(Object a);

Aber: "The method start() in the type Thread is not applicable for the arguments (Object)"


----------



## SlaterB (8. Jul 2008)

die run-Operation und start-Operation sind nunmal fest, auf diesem Wege kannst du nichts übergeben,
aber du kannst die Daten per set-Operation oder Konstruktor vor dem start()-Aufruf in LogScanThread in Exemplarvariablen ablegen
und run holt sie dann von dort ab


----------



## musiKk (8. Jul 2008)

```
//Erzeuge LogScanThread
		LogScanThread parallelLogScan = new LogScanThread();
		parallelLogScan.setObject(Object a);
		parallelLogScan.start();
```


```
public class LogScanThread extends Thread{
	private Object foobar = null;
	public void setObject(Object a){
		this.foobar = a;
	}
```

Bei deiner Methode hast du einfach eine neue run-Methode mit einer anderen Signatur erzeugt, die jedoch nicht Bestandteil des Interfaces Runnable ist.


----------



## spaghettiBolognese (8. Jul 2008)

Habe in meinem Forumsbeitrag "Process - Befehle senden" ein Codebeispiel für die Erstellung von Threads. Vielleicht hilft dir das weiter?
Dort wird das Interface runnable implementiert und dann die implementierende Klasse dem Thread übergeben.


----------



## nipnip (8. Jul 2008)

musiKk hat gesagt.:
			
		

> ```
> //Erzeuge LogScanThread
> LogScanThread parallelLogScan = new LogScanThread();
> parallelLogScan.setObject(Object a);
> ...



super, es klappt dank deiner Zeilen...großes Dankeschön  Ich denke, ich muss einfach ein wenig mehr OOP-Logik verinnerlichen 

Bis zur nächsten Frage 

-nipnip


----------



## musiKk (8. Jul 2008)

Ok, kein Problem.


----------

