Thread - Methoden in die run Methode Schreiben

killabeez

Mitglied
Hallo Leute, ich habe einige Fragen zu Threads.

1. Frage: Kann ich bei der Überschreibung der run Methode auch methoden hineinschreiben die in der Klasse sind? Nehme man an, mein code bestehe aus verschiedenartigen Anweisungen die ich in Methoden unterteilen könnte.

Pseudobeispielcode:
Java:
public void methode1
{
//Anweisungen
}
public void methode2()
{
//Anweisungen
}

public void run()
{
methode1();
methode2();
}

Spielt es eine Rolle ob ich das wie oben beschrieben schreib, oder muss man die Anweisungen direkt in die run methode schreiben? Kann sich etwas anders verhalten? Oder ist es sogar besser wenn es so gemacht wird, da eine bessere Übersichtlichkeit hergestellt wird?

2. Frage
Kann ich einen Thread auch starten, in dem ich in der Main Methode eine methode der Klasse aufrufe in der ein Thread, oder mehrere Threads gestartet werden?

Beispiel:
Java:
public void starteThreads()
{
for( int i = 0; i<5; i++)
{
Thread1 th = new Thread1();
th.start()
}
}

public static void main(String[] args)
{
Thread1 thread1 = new Thread1();
thread1.starteThreads();

Gibt es ein problem an einem solchen Aufruf?
 
1. Antwort
Probier es aus und du wirst merken, dass es geht und sogar besser ist, "da eine bessere Übersichtlichkeit hergestellt wird".

2. Antwort
Ja gibt es. Du referenzierst nirgends mehr auf den Thread und so wird sein Objekt sofort wieder beendet oder er verbraucht nur Leistung. Das weiß ich nicht genau. Du musst immer Referenzen auf Objekte halten, damit du auf sie zugreifen kannst.
Aber ansonsten kannst du natürlich Threads in anderen Threads erstellen. Aber dadurch kann schnell die Übersicht verloren gehen.
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort.

In der 2. Frage geht es mir nicht darum Threads in Threads zu starten.
Ich habe es wahrscheinlich ungenau formuliert(code).
In der Mainmethode möchte ich einen Objekt aufrufen, und durch eine methode dieses Objekts Threads starten.
Java:
Public static void main(String[] args)
{
KlassaA a = new KlasseA();
a.starteEineBestimmteAnzahlThreads();
}

public class KlasseA{
//..... run methode etc. ausgelassen.
public void starteEineBestimmteAnzahlThreads()
{
for(int i = 0; i<x; i++)
{
KlasseA th = new Klasse A()
th.start();
}
}

vielleicht hast du mich auch richtig verstanden 🙂
 
Ja das geht aber die Schleife macht keinen Sinn, weil der GarbageCollector die Threads relativ schnell wieder zerstören wird. Spätestens wenn sie am Ende ohrer run Methode angekommen sind.
 
Ein kleiner Fehler ist in meiner Antwort noch drin: laufende Threads sind für den GC unantastbar. Das heißt du wirst entweder einen HeapSpaceOverflow bekommen oder die Threads werden schnell genug beendet.
 

Neue Themen


Zurück
Oben