Threads starten

Diskutiere Threads starten im Java Basics - Anfänger-Themen Bereich.
W

Werniman

Hallo,
ich fange gerade an, mich in das Thema Threads einzulesen und bin dabei über folgende Seite gestolpert:


Dabei hänge ich schon bei den ersten beiden Klassen fest.

Java:
  class DemoThread extends Thread {
      public void run() {
      for(int i = 0; i < 10; i++) {
        try {
          sleep(5000);
        }
        catch(InterruptedException e) {
        }
        System.out.println("Demo-Thread");
      }
    }
  }


  public class ThreadTest {
      public static void main(String args[]) {
      DemoThread demoThread;
 
      // Ab jetzt wird "Demo-Thread"
      // im Hintergrund ausgegeben:
      demoThread = new DemoThread();
      demoThread.start();
    }
  }

In der ersten Klasse wird ein Objekt namens DemoThread definiert und eine Methode namens "run()" überschrieben. In der 2.Klasse wird dann ein entsprechendes Objekt angelegt und dann eine Methode namens start gestartet. Soweit ich das sehe, wird der neue Thread immer mit dieser start()-Methode gestartet...aber woher weiß Java, dass es dadurch auch die Methode run() starten soll ?
 
F

fhoffmann

Du erbst ja von der Klasse Thread und überschreibst dessen run-Methode (aus dem Interface Runnable).
Die Methode start der Klasse Thread ruft die (überschriebene) Methode run auf.
 
J

JustNobody

Diese Funktionalität steckt in der Klasse Thread. zur Anwendung reicht es also prinzipiell aus, die Dokumentation der Klasse zu lesen (Und da ist dieses Vorgehen unter anderem beschrieben).

Wenn Dich die Hintergründe interessieren, dann kann man sich den Source ansehen. Den Source von Thread vom openjdk 8 könnte man z.B. hier finden:http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/lang/Thread.java

Dann wird man aber schnell stutzen, denn start() ruft einfach eine ominöse start0() Methode auf, die als "private native" deklariert wurde und wo dann die Analyse von Java Code aufhört. Native Methoden sind in c / c++ geschrieben und nicht mehr in Java. Was dies aber bei Thread bedeutet, findet sich u.a. in diesem Link: https://medium.com/@unmeshvjoshi/how-java-thread-maps-to-os-thread-e280a9fb2e06

Wenn man es genau haben wollte, dann würde einen das z.B. noch über http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/native/java/lang/Thread.c führen und so weiter.... Das alles weiter zu beschreiben führt aber hier zu weit. Hier kommt man dann schnell in Internas, die einen (normalen) Java Entwickler überhaupt nicht interessieren - zumindest so lange, wie er nicht selbst am openjdk rumbasteln möchte ...
 
Thema: 

Threads starten

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben