Heim > Java > javaLernprogramm > Hauptteil

Java – Multithreading

高洛峰
Freigeben: 2016-11-21 11:09:07
Original
1924 Leute haben es durchsucht

Multithreading-Implementierungsmethode:

Thread-Klasse erben

Runnable-Klasse implementieren

---------------- - ------------------------------------------------- - -----------------

 1. Erben Sie die Thread-Klasse

 Nachdem Sie die Thread-Klasse geerbt haben, müssen Sie den öffentlichen Void-Lauf überschreiben( ) der übergeordneten Klassenmethode als Hauptmethode des Threads.

Die Ausführung aller Threads muss gleichzeitig erfolgen, das heißt: Mehrere Threads werden abwechselnd im gleichen Zeitraum ausgeführt. Um diesen Zweck zu erreichen, dürfen Sie die run()-Methode nicht direkt aufrufen. Stattdessen sollten Sie die start()-Methode der Thread-Klasse aufrufen, um mehrere Threads zu starten.

Vergleich zwischen dem Aufruf der start()-Methode und dem Aufruf der run()-Methode:

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<10; i++) {
        System.out.println(name + "打印:" + i);
        }
    }
    
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        MyThread mt3 = new MyThread("线程C");
        mt1.start();
        mt2.start();
        mt3.start();
    }
}
Nach dem Login kopieren

Ausführungsergebnisse: (Drei Threads werden gleichzeitig und abwechselnd ausgeführt, es gibt keine feste Ausführungsreihenfolge)

Java – Multithreading

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<5; i++) {
        System.out.println(name + "打印:" + i);
        }
    }
    
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        MyThread mt3 = new MyThread("线程C");
        mt1.run();
        mt2.run();
        mt3.run();
    }
}
Nach dem Login kopieren

Ausführungsergebnisse: (Drei Programme werden nacheinander ausgeführt)

Java – Multithreading

2. Der start() Methode implementiert Multithreading Das Prinzip von

Öffnen Sie den start()-Methodenteil des Quellcodes der Thread-Klasse:

public synchronized void start() {
        if (threadStatus != 0)
            throw new IllegalThreadStateException();
        group.add(this);
        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
            }
        }
}
private native void start0();
Nach dem Login kopieren

Das native Schlüsselwort bezieht sich auf die Methode zum Aufrufen des Betriebssystems. und die Methode start0() ist die Methode des Betriebssystems.

Da der Start von Threads die Zuweisung von Ressourcen im Betriebssystem beinhaltet, sollte der Start bestimmter Threads je nach Betriebssystem unterschiedlich implementiert werden. Die JVM implementiert unterschiedliche Implementierungen entsprechend der in verschiedenen Betriebssystemen definierten start0()-Methode. Auf diese Weise ändert sich der Name der start0()-Methode auf Multithread-Ebene nicht und verschiedene Betriebssysteme haben unterschiedliche Implementierungen.

Java – Multithreading

Schematische Darstellung

Fazit: Nur die start()-Methode der Thread-Klasse kann Betriebssystemressourcen zuweisen, daher ist die Möglichkeit, Multithreads zu starten immer Thread Die start()-Methode der Klasse.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage