Anfängerfrage zu Threads

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Habe im Netz folgendes Programm gefunden.
Code:
(1)public class ThreadBased1
(2){
(3)	public static void main(String[] argv)
(4)	{
(5)		HelloThread northGerman = new HelloThread( "Moin Moin" );
(6)		HelloThread southGerman = new HelloThread( "Gruess Gott" );
(7)
(8)		northGerman.start();
(9)		southGerman.start();
(10)
(11)		System.out.println( "threads started ..." );		
(12)	} //end main()
(13)} //end class ThreadBased1
(14)// *****************************************************************
(15)class HelloThread extends Thread
(16){
(17)	protected String greetingText;
(18)
(19)	public HelloThread (String greetingText)
(20)	{
(21)		this.greetingText = greetingText;
(22)	} //standard constructor
(23)
(24)	public void run()
(25)	{
(26)		while (true)
(27)		{
(28)			try
(29)			{
(30)				Thread.sleep(500);
(31)			} //try
(32)			catch (InterruptedException ie)
(33)			{
(34)				System.out.println("an InterruptedException occurred\n"+ie.toString()+"\n"+ie.getMessage() );
(35)			} //catch
(36)
(37)			System.out.println( greetingText);
(38)		} //while
(39)	} //run()
(40)}//class HelloThread

Nun zu meiner Frage. Der erste Thread (northGerman) startet...und kommt in die run() Methode. Dort ist aber eine Endlosschleife while(true). Wie startet nun der zweite Thread (southGerman)?? Ich dachte, der zweite Thread startet wenn der erste beendet ist. Dieser kommt aber nie aus der Schleife raus....folglich wird er nicht beendet...wei funktioniert das ???
 

MatthiasKnorr

Aktives Mitglied
Hi,

die start() Methode eines Thread blockiert nicht. Es wird ja ein neuer Thread erstellt und gestartet.
Der andere Thread, also der Main-Thread läuft ganz normal weiter, es sei denn, du machst ein join() auf den neuen Thread.
Dir ist aber schon klar, was Threads sind und für was sie verwendet werden, oder?

Grüße,
Matthias
 
G

Gast

Gast
Es soll dadurch eine quasiparallele Verarbeitung stattfinden. Ich dachte nur, dass ein Thread beendet sein muss bevor der andere starten kann.
 

Wildcard

Top Contributor
Gast hat gesagt.:
Es soll dadurch eine quasiparallele Verarbeitung stattfinden. Ich dachte nur, dass ein Thread beendet sein muss bevor der andere starten kann.
Und wo ist dann die 'quasi' parallelität? :bahnhof:
 

Eldar

Aktives Mitglied
hehe gut gekontert...
@gast
Die Sache ist die,
der main Thread startet und kommt an die Anweisung x.start(), es wird ein neuer Thread (zusätzlich zum mainthread) aufgerufen der auch sofort loslegt. Dieser Thread stoppt irgendwann (Auch bei Endlosschleifen), weil ihm die CPU keine Rechenzeit mehr gibt. Dann läuft ein anderer Thread weiter. Das ist pseudoparallelität, weil das zum Einen sehr schnell geht (und somit sehr parallel aussieht), zum anderen aber so erstmal unkontrollierbar ist. Man kann nicht vorhersagen, wann welcher Thread läuft und wann wlecher stoppt.
Um das zu kontrollieren gibt es verschieden sprachliche Hilfsmittel in Java. synchronized, wait und notify bzw notifyall.... Ausserdem natürlich diverse Strukturideen wie Semaphoren o.ä
 

byte

Top Contributor
Der Thread stopt nicht, sondern gibt lediglich die Kontrolle ab. Das passiert auch nicht 'irgendwann' sondern direkt beim Statement Thread.sleep(500);
 

Hilefoks

Bekanntes Mitglied
byto hat gesagt.:
Der Thread stopt nicht, sondern gibt lediglich die Kontrolle ab. Das passiert auch nicht 'irgendwann' sondern direkt beim Statement Thread.sleep(500);
Das stimmt so auch nicht. Bei Thread.sleep(500) gibt der Thread in der Tat die Kontrolle ab, allerdings kann das OS einen Thread auch jederzeit unterbrechen. Und das tut ein OS für gewöhnlich auch laufend. Wann das OS den Thread unterbricht kann man dabei wirklich nicht wissen. Das hängt u.A. vom Scheduler und dessen Implementierung, von der Anzahl der 'parallel' laufenden Threads, usw. ab.

MfG,
Hilefoks
 

byte

Top Contributor
Hilefoks hat gesagt.:
byto hat gesagt.:
Der Thread stopt nicht, sondern gibt lediglich die Kontrolle ab. Das passiert auch nicht 'irgendwann' sondern direkt beim Statement Thread.sleep(500);
Das stimmt so auch nicht. Bei Thread.sleep(500) gibt der Thread in der Tat die Kontrolle ab, allerdings kann das OS einen Thread auch jederzeit unterbrechen. Und das tut ein OS für gewöhnlich auch laufend. Wann das OS den Thread unterbricht kann man dabei wirklich nicht wissen. Das hängt u.A. vom Scheduler und dessen Implementierung, von der Anzahl der 'parallel' laufenden Threads, usw. ab.

Die Theorie ist mir durchaus geläufig. Aber hier wurde eine konkrete Frage gestellt und auf die habe ich mich bezogen. Jeder Scheduler wird in der Praxis beim Thread.sleep() die Kontrolle abgeben.
 
G

Guest

Gast
Was wäre nun, wenn es diese slepp() Methode nicht geben würde? Würde der zweite Thread dann irgendwann loslaufen, unkontrolliert...also z.B. beim 10 Schleifendurchlauf???
 

byte

Top Contributor
Dann kannst Du es kaum voraussagen. Es könnte jedes mal anders sein, vielleicht aber auch 99mal so und dann auf einmal ganz anders. ;) Statt sleep könntest Du auch yield() machen, aber das ist auch nur ein Hint an den Scheduler.

In der Praxis ist sleep schon ein ziemlich guter Garant dafür, dass ein anderer Thread an die Reihe kommt.
 
G

Gast

Gast
Alles klar, jetzt ist der "Mythos" Thread um einiges verständlicher ..vielen,vielen Dank :) :)
 
G

Gast

Gast
Hallo,
ich hätte auch eine Frage zu Threads. Gibt es auch Threads ohne Methode run() bzw. muss diese vorhanden sein???? Wenn ich einen Thread mit z.B. t.start() starte arbeitet dieser die Methode run() ab,was ist aber wenn diese nicht vorhanden ist? Oder habe ich irgendwas falsch verstanden????
 

MatthiasKnorr

Aktives Mitglied
Hi,

um eine Klasse threadable zu machen mußt du das Interface Runnable implementieren oder die Klasse Thread erweitern, also "implements Runnable" oder "extends Thread". Dabei bist du gezwungen die MEthode run() zu implementieren. Du kannst praktisch nicht anders, die Methode ist vorgeschrieben. :)

Grüße,
Matthias
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
V Anfängerfrage: HelloWorld läuft nicht Java Basics - Anfänger-Themen 3
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
P Anfängerfrage, Primitiv,komplex Java Basics - Anfänger-Themen 1
pkm Erste Schritte Anfängerfrage zu ::new Java Basics - Anfänger-Themen 4
A Anfängerfrage Java Basics - Anfänger-Themen 7
M Erstellung Interfaces....totale Anfängerfrage Java Basics - Anfänger-Themen 16
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
R Anfängerfrage zu Methoden in Vererbte Klassen Java Basics - Anfänger-Themen 2
F Erste Schritte (Gelöst) Anfängerfrage Arraylist ausserhalb der Main Methode Java Basics - Anfänger-Themen 2
DeVolt Anfängerfrage zu util.scanner Java Basics - Anfänger-Themen 2
T Anfängerfrage zu Schleifen und Arrays Java Basics - Anfänger-Themen 5
B Collections ArrayList füllen - Anfängerfrage Java Basics - Anfänger-Themen 1
Shams Anfängerfrage zu jnlp Java Basics - Anfänger-Themen 0
T Kleine Anfängerfrage :) Java Basics - Anfänger-Themen 4
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
F Anfängerfrage zu extends Java Basics - Anfänger-Themen 12
A Anfängerfrage: Zahlformat prüfen Java Basics - Anfänger-Themen 4
I Anfängerfrage: Fehlersuche Java Basics - Anfänger-Themen 2
A Methoden Anfängerfrage: 2 Listen Vergleichen Java Basics - Anfänger-Themen 7
L Anfängerfrage zu TileMap Java Basics - Anfänger-Themen 4
J anfängerfrage Java Basics - Anfänger-Themen 10
J Anfängerfrage HelloWorld? cmd-Problem Java Basics - Anfänger-Themen 35
J Anfängerfrage zu Grundlagen von Packages Java Basics - Anfänger-Themen 7
J Anfängerfrage zur Variablen Java Basics - Anfänger-Themen 11
J Anfängerfrage :-) Java Basics - Anfänger-Themen 5
M Banale Anfängerfrage Java Basics - Anfänger-Themen 3
Y Anfängerfrage zu array(-Syntax) Java Basics - Anfänger-Themen 6
J Leichte Java Anfängerfrage. Bitte schnelle Antwort. :) Java Basics - Anfänger-Themen 10
U Anfängerfrage - Multithreading Java Basics - Anfänger-Themen 8
T Aufrufen von get-Methode aus anderer Klasse (absolute Anfängerfrage) Java Basics - Anfänger-Themen 2
G Anfängerfrage zu "@Override" Java Basics - Anfänger-Themen 5
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
A Anfängerfrage - array required, but java.lang.String found Java Basics - Anfänger-Themen 7
M Kleine Anfängerfrage Java Basics - Anfänger-Themen 10
S Anfängerfrage zu Array Java Basics - Anfänger-Themen 8
K Anfängerfrage: Fehlermeldung Java Basics - Anfänger-Themen 6
D Anfängerfrage N. Office Access NOA: setHidden und dann . Java Basics - Anfänger-Themen 2
N Anfängerfrage Java Basics - Anfänger-Themen 14
N anfängerfrage. returnwerte Java Basics - Anfänger-Themen 3
Gama Importieren von Klassen [Anfängerfrage] Java Basics - Anfänger-Themen 3
G Anfängerfrage Java Basics - Anfänger-Themen 11
B Anfängerfrage zu Swing "Reload" Java Basics - Anfänger-Themen 2
N Anfängerfrage bezüglich Speicherverwaltung Java Basics - Anfänger-Themen 3
Q Anfängerfrage Java Basics - Anfänger-Themen 6
J Anfängerfrage: wie externe Dateien importieren? Java Basics - Anfänger-Themen 5
S Anfängerfrage Java Basics - Anfänger-Themen 7
G Anfängerfrage zu Vererbung Java Basics - Anfänger-Themen 6
B Anfängerfrage zu 'NoClassDefFoundError' Java Basics - Anfänger-Themen 2
J IO Frage Hex-Output - Anfängerfrage Java Basics - Anfänger-Themen 5
T Anfängerfrage -> Projekt Java Basics - Anfänger-Themen 2
C Anfängerfrage ->Objekte und Arrays Java Basics - Anfänger-Themen 4
V Anfängerfrage Java Basics - Anfänger-Themen 8
E RMI Anfängerfrage Java Basics - Anfänger-Themen 10
DEvent anfängerfrage: wieso layout erst beim verändern? Java Basics - Anfänger-Themen 6
G Anfängerfrage Java Basics - Anfänger-Themen 2
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
1 Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
M Threads run Methode Java Basics - Anfänger-Themen 4
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
T Threads Synchronisieren Java Basics - Anfänger-Themen 6
D Frage Threads Java Basics - Anfänger-Themen 6
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
kilopack15 Mehrere Threads in einer Klasse Java Basics - Anfänger-Themen 8
H Threads funktionieren nicht Java Basics - Anfänger-Themen 4
J Aufgabe(Threads) richtig verstanden/implementiert Java Basics - Anfänger-Themen 27
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben