[gelöst] Thread enthält Objekt - wie kommte ich an die Methoden des Objekts

Status
Nicht offen für weitere Antworten.

ElBobby

Mitglied
Moin,

wahrscheinlich schneller Abwasch, aber hier habe ich ein kleines Problem.
Mein Threadarray wird sauber befüllt und die Threads laufen wie sie sollen, aber nun muss ich regelmäßig
an Variablen der Objekte, welche im Thread sind. Wie kann ich dies realisieren. Das Objekt hat entsprechende Methoden. Thread nicht?

Java:
public class Hilfsklasse
{
	public static void main(String[] args)
	{
		// Objekte die in Threads gepackt werden erzeugen
		objekte.Verbrenner[] objs = new objekte.Verbrenner[2];
		objs[0]=new objekte.Motorrad();
		objs[1]= new objekte.Auto();
		
		// Freies Onjekt Fahrrad was selbst ein Runnabele implementiert
		objekte.Fahrrad rad = new objekte.Fahrrad();
		Thread fahrrad = new Thread(rad);
		
		// Threads voll machen, mittels Mantelklasse
		Thread[] dieThreads = new Thread[objs.length];
		for(int i = 0;i< dieThreads.length;i++)
		{
			dieThreads[i] = new Thread(new objekte.ThreadMantel(objs[i]));
			// Thread Starten
			dieThreads[i].start();
		}
		
		// Fahrrad starten lassen
		fahrrad.start();
		
		try
		{
			Thread.sleep(5000);
			fahrrad.interrupt();
		}
		catch(InterruptedException e)
		{
			//
		}
	}
}

Wenn ich nun zum Beispiel an die Methoden von "rad" möchte, was ja nun als Objekt an den Thread fahrrad übergeben wurde, wie bekomme ich das hin?

Dank!
 
Zuletzt bearbeitet:
gar nicht, das Runnable, welches an Thread übergeben wird, landet in einem privatem Klassenattribut und ist nach außen nicht zugänglich,

speichere statt Thread ein Objekt einer eigenen Klasse, in welchem das Runnable und das Thread-Objekt abgelegt sind,
oder speichere nur das Runnable, wenn du den Thread nicht brauchst,
oder speichere den Thread in deiner Runnable-Klasse

in jedem Fall wirst du, wenn du mehrere ähnliche Klassen in einem Array speicherst, nicht wissen, ob du nun ein Auto oder ein Fahrrad vorliegen hast,
du muss dann casten

--------

'objekte' ist eine Klasse? dann groß schreiben!
oder ein package, was spricht dann gegen import-Anweisungen?
 
Gar nicht, verdammt, das habe ich erwartet.

Ich verstehe allerdings nicht ganz deine Antwort.

Ein Beispiel wäre die Klasse Fahrrad:
Java:
package objekte;

public class Fahrrad extends Verbrenner implements Runnable
{

	public Fahrrad()
	{
		this.speed = 3;
		this.raeder = 2;
	}
	
	public void fich()
	{
		
	}
	@Override
	public void run()
	{
		try
		{
			while(true)
			{
				System.out.println("Position " + this + " an " + pos);
				pos = pos + speed;
				Thread.sleep(500);
			}
			
		}
		catch(InterruptedException e)
		{
			System.out.println("ENDE Fahrad");
		}
		
	}
	
	
}

Dort habe ich Runnable mit ins Spiel gebracht. Wenn ich allerdings dann in main() die rad.run() aufrufe klappt das zwar, aber mein Prof sagt das sei schlechter Stil.

Hast du vielleicht ein Beispiel für deine Antwort, wie gesagt, ich kann dir leider nicht folgen.

Danke
 
in der main hast du ein Variable rad und eine Variable fahrrad,

wenn du nur den Thread fahrrad hast, kommst du von dort aus nicht zum rad, und Thread kannst du auch nicht verändern,
andersrum gehts schon, rad ist ein Objekt deiner Klasse Fahrrad, dort kannst du den Thread abspeichern, wenn du noch ein Attribut, setter + getter usw. definierst

merke dir alson einem Array das rad-Objekt, dann hast du auf beide Zugriff
 
Super, das war die Lösung. Das Objekt hat selbst einen Thread bekommen
Thread peng = new Thread(this);

und dann läuft das ganze. Sauber. Das kommt dann noch in die vererbende Klasse und alle Erben sind happy.
Vielen Dank!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben