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?
 

RySa

Bekanntes Mitglied
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.
 

specialize

Bekanntes Mitglied
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:

Marco13

Top Contributor
???: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();
}
 

RySa

Bekanntes Mitglied
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:

specialize

Bekanntes Mitglied
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)
 

RySa

Bekanntes Mitglied
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:

specialize

Bekanntes Mitglied
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!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U [Problem] Handling multiple frames Java Basics - Anfänger-Themen 5
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
T Übungsaufgabe Event Handling Java Basics - Anfänger-Themen 0
J Thread Handling Java Basics - Anfänger-Themen 9
M Exception Handling Java Basics - Anfänger-Themen 2
llabusch Exceotion.Handling Aufgabe mit "throw" Java Basics - Anfänger-Themen 13
U Threadsafe Event-Handling Java Basics - Anfänger-Themen 2
G Frage zu Exception-Handling Java Basics - Anfänger-Themen 5
T batch handling Java Basics - Anfänger-Themen 11
C Klassen NullPointerException beim Event Handling in GUI Java Basics - Anfänger-Themen 8
X JFrame als JAR unsichtbar trotz Exception Handling Java Basics - Anfänger-Themen 5
S Schlechter Stil beim Exception Handling Java Basics - Anfänger-Themen 6
S Exception-Handling in main-Funktion? Java Basics - Anfänger-Themen 6
S Exception Handling Java Basics - Anfänger-Themen 4
M Frage zu Exception Handling Java Basics - Anfänger-Themen 10
P Handling mit 2D-Arrays Java Basics - Anfänger-Themen 9
D Exception Handling Java Basics - Anfänger-Themen 3
Z csv Dateien und ihr Handling Java Basics - Anfänger-Themen 3
D OOP Exception Handling - NullPointerException Java Basics - Anfänger-Themen 17
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
B jTextField handling in Berechnungsprogramm Diskussion Java Basics - Anfänger-Themen 4
M Exception handling Java Basics - Anfänger-Themen 5
J Event-Handling geht nicht Java Basics - Anfänger-Themen 6
T Exception-Handling beim Lesen einer XML-Datei mit XMLDecoder Java Basics - Anfänger-Themen 4
G Exception-Handling Java Basics - Anfänger-Themen 6
L Thread-Handling & Standard-Ausgabe verschönern Java Basics - Anfänger-Themen 7
D Thread Handling Java Basics - Anfänger-Themen 10
B Exception Handling in der ActionPerformed-Methode Java Basics - Anfänger-Themen 7
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
G GUI Event Handling Java Basics - Anfänger-Themen 5
T Exception Handling? Java Basics - Anfänger-Themen 6
N File-Handling Java Basics - Anfänger-Themen 4
A Exception Handling Fragen Java Basics - Anfänger-Themen 2
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
JD_1998 Multiple Parametereingabe Java Basics - Anfänger-Themen 3
D [AES] input not multiple of 16 Java Basics - Anfänger-Themen 2
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
x22 Java Multiple Choice Test Java Basics - Anfänger-Themen 8
Dogge Multiple markers at line 15 Java Basics - Anfänger-Themen 13
P Threads Multiple Dialogboxen Java Basics - Anfänger-Themen 6
G Multiple Leerzeichen entfernen Java Basics - Anfänger-Themen 13
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
H Multiple Markers at this line Java Basics - Anfänger-Themen 3
H Multiple Fileaccess - sync? Java Basics - Anfänger-Themen 7
H Multiple JFrames im GUI Editor von NetBeans Java Basics - Anfänger-Themen 2
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
C Multiple Choice Test Java Java Basics - Anfänger-Themen 5
T Multiple BufferedImage Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben