Threads Handling multiple different Threads

specialize

Bekanntes Mitglied
Hey ich habe eine Frage zur verwendung von threads.

Ich schreibe ja die Funktion, die der Thread ausführen soll, in die run() methode,
wenn ich jetzt verschiedene Threads parallel ausführen will,
würde mir eine if verzweigung in run() einfallen.
Funktioniert es so?
Gibt es einen besseren Weg?
 
Es würde Dir eine if methode einfallen ? Was meinst du ? Und müssen die Threads synchron laufen, oder machen die Aufgaben die unabhängig voneinander sind ? Wenn der eine Thread erst etwas ausführen darf, wenn ein anderer fertig sind, dann ist dies am besten mit synchronized Methoden zu realisieren. Verstehe aber nicht ganz was überhaupt die Frage ist. Frag konkreter, ggf. mit Beispielen.
 
Meine run() methode:
Java:
	public void run(){
	try{
				
		BufferedReader in = new BufferedReader(
		new InputStreamReader(prc.getInputStream()));				
		String line=null;		
		while ((line = in.readLine()) != null)				
			{
			line = in.readLine();
			ta_s.setText(ta_s.getText()+line +"\n");
			ta_s.setCaretPosition(ta_s.getText().length());
			}
		System.out.println("Thread closed");
		in.close();
		}	
	catch(Exception e) {
			System.out.println(e);
		}
	}

jetzt definiere ich einen thread th1 und lasse ihn starten .start();

wenn ich jetzt gleichzeitig einen thread th2 starten und rennen lassen will (der etwas anderes ausführt),
würde mir eine möglichkeit einfallen, dass ich im run() eine if abfrage mache:



Java:
int i = 0;	

public void threadstarter(){

th1.start();
i=1;
th2.start();
}

public void run(){
	try{
				
if (int i == 0){
		BufferedReader in = new BufferedReader(
		new InputStreamReader(prc.getInputStream()));				
		String line=null;		
		while ((line = in.readLine()) != null)				
			{
			line = in.readLine();
			ta_s.setText(ta_s.getText()+line +"\n");
			ta_s.setCaretPosition(ta_s.getText().length());
			}
		System.out.println("Thread closed");
		in.close();
		}
}
else{
while(...)
{ 
2ter thread
}
}

}	
	catch(Exception e) {
			System.out.println(e);
		}
	}

Meine Frage: wird das so gemacht, bzw. funktioniert es überhaupt?
 
Zuletzt bearbeitet:
???:L Vielleicht eher sowas wie
Java:
class FirstTask implements Runnable
{
    @Override
    public void run() { /* Erste Aufgabe */ }
}

class SecondTask implements Runnable
{
    @Override
    public void run() { /* Zweite Aufgabe */ }
}

void startBothTasks()
{
    Thread t0 = new Thread(new FirstTask());
    t0.start();

    Thread t1 = new Thread(new SecondTask());
    t1.start();
}
 
Vielleicht bin ich zu blöd, aber ich verstehe immer noch nicht was du damit bewirken willst. Und die If abfrage dient ....? Willst du in Abhängigkeit von Werten verschiedene Threads starten oder was soll das ganze ? Du sagst die Threads sollen parallel laufen und bearbeiten verschiedene Streams. Wieso brauchst du dann irgendwelche if-Abfrage im run() ?

Oder willst du einfach nicht für Threads die verschiedene Aufgaben haben, separate Klassen machen ? Das solltest du aber. Wenn ein Thread schreibt, und der andere ließt, dann macht man dafür 2 Separate Klassen, die vom Thread oder Runnable erben und in der run() unterschiedlichen Code haben und nicht nur Eine Klasse, in der die Aufgaben mit If's zu unterscheiden sind. Wenn es bei den Threads, nur 2-3 Zeilen Code anders sind und der Rest gleich, dann kann man so etwas machen.

Und btw. ist threadstarter() und run() in der gleichen Klasse ? th1 und th2 müssen irgendwelche Threads sein, aber woher sollen die von deinen localen int-Werten überhaupt bescheid wissen ? Du musst die schon als parameter entweder dem Konstruktor oder über eine set-Methode übergeben, sonnst wissen die nichts von den ints.

EDIT: Genau so etwas was der Marco geschrieben hat meinte ich. Du brauchst separate Klassen für die Threads, wenn deren Aufgaben ganz unterschiedlich sind.
 
Zuletzt bearbeitet:
hoppla, dass mit den ints ist klar und ja ich hatte es nur in einer klasse.

wenn ich jetzt 2 klassen machen und beide (verschiedenen) threads hintereinander starte, rennen sie gleichzeitig parallel?

danke aufjedenfall mal!

würde es mit einer if abfrage theoretisch, wie in meinem beispiel, auch funktionieren? (hab mein beispiel jetzt angepasst)
 
Ja, so wie der Marco es geschrieben hat, würden die beiden Threads ziemlich parallel (der erste wird natürlich ein paar mili/nano - sekunden früher gestartet) laufen.

Und zu deinem "angepasstem" Beispiel:
Das könnte so funktionieren, wobei ich nicht weißt wo und wie du die th1 und th2 deklarierst. Wenn das alles in einer Klasse ist, dann muss diese Klasse vom Thread oder Runnable erben und du musst Objekte dieser Klasse erzeugen. Und Thread-Objekte in der gleichen Thread-Klasse zu deklarieren und starten macht nicht viel Sinn. Kannst du nicht die ganze Klasse , bzw die Klasse mit dem Konstruktor und variablendeklaration posten ?
 
Zuletzt bearbeitet:
Die ganze Klasse wäre wohl zu umfangreich (2200 zeilen) ^^
Hab damit mit Java angefangen und arbeite halt jetzt nochmal daran.
Also prinzipiell hat die Klasse die Runnable geerbt gehabt, allerdings hab ich jetzt schon so gelöst wie Marco geschrieben hat.
Danke aufjedenfall für Hilfe!
 

Zurück
Oben