Java Threads thread.start( ) und public void run( ) in selber Klasse?
Schaut euch mal bitte folgenden Code an:
In der main-methode wird zuerst ein Objekt der Klasse Main mit dem Namen thread erzeugt. Dann wird thread.start ( ) ausgeführt.
In der selben Klasse Main steht noch die public void run ( ) {
... Methode
Führe ich den Code aus, z. B. in eclipse erscheint auf der Konsole:
This code is outside of the thread
This code is running in a thread
► Die Reihenfolge verwirrt mich hier:
Ich führe doch zuerst thread.start( ) in der main-Methode aus. Dadurch wird der Thread gestartet, d. h. die run ( ) Methode wird ausgeführt. Danach wird erst
System.out.println("This code is outside of the thread");
ausgeführt.
► Die Reihenfolge bei Ausführung des Codes in der Konsole müsste doch damit
This code is running in a thread
This code is outside of the thread
sein. Warum ist es aber genau andersherum?
2 Antworten
Du hast Standardmäßig einen Thread und wenn du einen weiteren erstellst, hast du 2. Wenn du 2 hast, laufen die nicht nacheinander, sondern nebeneinander und der schnellere kommt dadurch zu erst. Wenn du den 2. Startest, muss der erst erstellt werden. In der Zeit läuft der Hauptthread aber schon weiter
Ja. Der Main Thread ist nur schneller, weil der ja bereits die ganze Zeit durchläuft und nicht nochmal gestartet werden muss. Er ist ja schon gestartet. So gesehen ist er auch nicht schneller, nur da er schon läuft, hat er den neuen Thread überholt
Mit
thread.start();
erhält ein Thread die Erlaubnis, loszulegen. Anders ausgedrückt: Er wird rechenwillig gesetzt. Wann er tatsächlich startet, wird durch die Threadverwaltung der Java Virtual Machine entschieden. Über die zeitliche Aufeinanderfolge der Aktionen in verschiedenen Threads sind grundsätzlich keine Annahmen möglich.
Ein wenig verwirrend, aber ok. Danke!
D. h. der schnellere Thread ist hier die main-Methode.
In meinem Bsp. starte ich mit thread.start( );
den zweiten Thread. Da aber der Thread der main-Methode schneller ist, als der zweite Thread wird mir auf der Konsole zuerst:
This code is outside of the thread vor
This code is running in a thread angezeigt.
Wenn ich thread.start( );
ausführe, dann wird der Teil, der unter public void run ( ) {
...
ausgeführt. Richtig?