Kommen Sie direkt zur Sache
Wenn wir in IT-Kreisen über Parallelität sprechen, sprechen wir zwangsläufig von einer Reihe von Threads, die gleichzeitig auf einem Computer ausgeführt werden. Wenn auf diesem Computer mehrere Prozessoren oder ein Multi-Core-Prozessor vorhanden ist, dann läuft er tatsächlich „gleichzeitig“. Wenn der Computer jedoch nur über einen Single-Core-Prozessor verfügt, ist „gleichzeitiger Betrieb“ nur der Schein.
Alle modernen Betriebssysteme unterstützen die gleichzeitige Ausführung von Aufgaben. Sie können online Musik hören und Nachrichten lesen, ohne die erste E-Mail zu verzögern. Wir können sagen, dass diese Parallelität eine Parallelität auf Prozessebene ist. Innerhalb des Prozesses kann ich auch erkennen, dass es viele gleichzeitige Aufgaben gibt. Wir nennen gleichzeitige Aufgaben, die in einem Prozess ausgeführt werden, Threads.
Ein weiteres gängiges Konzept im Zusammenhang mit Parallelität ist Parallelität. Es gibt einige Unterschiede und einige Zusammenhänge zwischen Parallelität und Parallelität. Einige Programmierer (Autor, übersetzt als „Programmierer“) glauben, dass die Ausführung einer Anwendung mit mehreren Threads auf einem Single-Core-Prozessor Parallelität darstellt, und Sie können die Ausführung des Programmierers außerdem beobachten, wenn Ihr Programm mit mehreren Threads ausgeführt wird Auf mehreren Prozessoren oder Mehrkernprozessoren sind sie parallel. Es gibt auch einige Programmierer, die glauben, dass, wenn die Threads der Anwendung nicht in einer voreingestellten Reihenfolge ausgeführt werden, es zur Vereinfachung der Problemlösung einen Thread gibt und diese Threads dann in einer bestimmten Reihenfolge ausgeführt werden das ist Parallelität.
In diesem Kapitel wird anhand von zwölf Beispielen gezeigt, wie Sie mit der Java7-API einige grundlegende Thread-Operationen ausführen. Sie werden in einem Java-Programm sehen können, wie man Threads erstellt und ausführt, wie man die Ausführung von Threads steuert, wie man eine Gruppe von Threads als Einheit manipuliert usw.
In diesem Abschnitt erfahren Sie, wie Sie einen Thread in einem Java-Programm erstellen und ausführen. In einem Java-Programm ist alles ein Objekt, ebenso wie Threads. Es gibt zwei Möglichkeiten, Threads zu erstellen:
1. Erben Sie die Thread-Klasse und überschreiben Sie die run()-Methode.
2. Erstellen Sie eine Klasse, die die Runnable-Schnittstelle implementiert, erstellen Sie dann ein Objekt der Thread-Klasse und übergeben Sie dann die Instanz der Klasse, die die Runnable-Schnittstelle implementiert, als Parameter an die Instanz der Thread-Klasse.
In diesem Abschnitt verwenden wir die zweite Methode, um zehn Threads zu erstellen und auszuführen. Jeder Thread berechnet und gibt das Produkt von zwei ganzen Zahlen innerhalb von zehn aus.
weiß es
Befolgen Sie die unten beschriebenen Schritte, um dieses Beispiel umzusetzen:
1. Erstellen Sie eine Klasse mit dem Namen Calculator und implementieren Sie die Runnable-Schnittstelle. Der Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
Die öffentliche Klasse Calculator implementiert Runnable {
2. Deklarieren Sie ein privates Ganzzahlattribut mit dem Namen „Nummer“ und implementieren Sie den Konstruktor dieser Klasse, um das gerade deklarierte Attribut zu initialisieren. Der Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
private int-Nummer;
öffentlicher Rechner(int Zahl) {
this.number = Zahl;
}
3. Implementieren Sie die run()-Methode, bei der es sich um das Programm (die Anweisung) handelt, das ausgeführt wird, wenn der von uns erstellte Thread ausgeführt wird. Diese Methode wird also zur Berechnung der Multiplikationstabelle verwendet. Der spezifische Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.printf("%s: %d * %d = %d/n",
Thread.currentThread().getName(),
Zahl, i, i * Zahl);
}
}
4. Jetzt ist es an der Zeit, die Hauptklasse der Beispielanwendung zu implementieren. Erstellen Sie eine Klasse mit dem Namen Main und fügen Sie die Hauptmethode in der Klasse hinzu. Der Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Main {
public static void main(String[] args) {
5. Erstellen Sie innerhalb der main()-Methode eine for-Schleife, die zehnmal durchlaufen wird. Erstellen Sie im Schleifenkörper einen Objektrechner der Calculator-Klasse, erstellen Sie einen Objektthread der Thread-Klasse und übergeben Sie den Rechner als Parameter der Konstruktor für die Initialisierungsanweisung. Rufen Sie abschließend die start()-Methode des Thread-Objekts auf. Der Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
for (int i = 0; i < 10; i++) {
Rechner Rechner = neuer Rechner(i);
Thread thread = neuer Thread(Rechner);
thread.start();
}
6. Führen Sie dieses Programm aus, um zu sehen, wie verschiedene Threads gleichzeitig ausgeführt werden.
weiß warum
Das Folgende ist eine Ausgabe, die beim Ausführen des Programms auf der Konsole ausgegeben wird. Wir können sehen, dass alle von uns erstellten Threads gleichzeitig ausgeführt werden.
Kopieren Sie den Codecode wie folgt:
Thread-3: 3 * 5 = 15
Thread-0: 0 * 2 = 0
Thread-3: 3 * 6 = 18
Thread-1: 1 * 6 = 6
Thread-1: 1 * 7 = 7
Thread-3: 3 * 7 = 21
Thread-3: 3 * 8 = 24
Thread-0: 0 * 3 = 0
Thread-0: 0 * 4 = 0
Thread-3: 3 * 9 = 27
Thread-1: 1 * 8 = 8
Alle Java-Programme führen mindestens einen Thread aus. Wenn wir ein Java-Programm ausführen, führt die Java Virtual Machine (im Folgenden als JVM bezeichnet) einen Thread aus und ruft das Programm auf, das die Methode main() enthält.
Wenn die start()-Methode des Thread-Objekts aufgerufen wird, wird ein weiterer Thread erstellt. Wie oft wird die start()-Methode aufgerufen, wie viele Threads werden erstellt.
Wenn alle Threads die Ausführung abgeschlossen haben, wird das Java-Programm beendet. (Sofern nicht besondere Umstände vorliegen, werden alle Nicht-Daemon-Threads ausgeführt.) Wenn der Startthread (z. B. der Thread, der die main()-Methode ausführt) beendet wird, werden die verbleibenden Threads weiter ausgeführt, bis die Rechenaufgabe abgeschlossen ist. Wenn einer der Threads System.exit() aufruft und die JVM auffordert, das Programm zu beenden, beenden alle Threads ihre Ausführung.
Wenn die run()-Methode des Thread-Objekts aufgerufen wird, wird der Thread nicht erstellt. Wenn die run()-Methode der Klasse aufgerufen wird, die die Runnable-Schnittstelle implementiert, wird der Thread nicht erstellt. Ein Thread wird nur erstellt, wenn die start()-Methode des Thread-Objekts aufgerufen wird.
niemals enden
Wie am Anfang dieses Abschnitts erwähnt, gibt es eine andere Möglichkeit, einen Thread zu erstellen: die Thread-Klasse erben und die run()-Methode überschreiben. Auf diese Weise können Sie ein Objekt der Thread-Unterklasse erstellen und dann start() aufrufen. Methode des Objekts.
Kopieren Sie den Codecode wie folgt:
Da ich mich auf das Interview vorbereitet habe, habe ich eine Reihe von Informationen zum Java-Multithreading gefunden, darunter dieses „Java 7 Concurrency Cookbook“. Die Erklärungen sind sehr einfach und leicht zu verstehen. Es ist sehr gut für Freunde geeignet, die es nicht wissen Ich habe viel über Multithreading, möchte es aber ernsthaft lernen. Nach der Suche konnte ich die chinesische Version nicht finden und beschloss, selbst ausreichend Lebensmittel und Kleidung herzustellen. Daher planen wir, eine inoffizielle Übersetzung zu veröffentlichen, deren Titel vorläufig „Java7 Concurrency Sample Collection“ lautet.
Nutzen Sie die Lehre
Dieser Artikel wurde aus dem „Java 7 Concurrency Cookbook“ übersetzt (D Gua Ge hat ihn als „Java7 Concurrency Beispielsammlung“ gestohlen) und dient nur als Lernmaterial. Es darf ohne Genehmigung nicht für kommerzielle Zwecke verwendet werden.
Kleiner Erfolg
Das Originalbuch enthält nicht den vollständigen Code, was zum Anzeigen nicht geeignet ist. Daher hat Bruder D Gua einen Abschnitt hinzugefügt, um die vollständige Version des in diesem Abschnitt gezeigten Codes anzuzeigen.
Der vollständige Code der Calculator-Klasse lautet wie folgt:
Paket com.diguage.books.concurrencycookbook.chapter1.recipe1;
/**
* Datum: 13.09.2013
* Zeit: 21:42
*/
Die öffentliche Klasse Calculator implementiert Runnable {
private int-Nummer;
öffentlicher Rechner(int Zahl) {
this.number = Zahl;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.printf("%s: %d * %d = %d/n",
Thread.currentThread().getName(),
Zahl, i, i * Zahl);
}
}
}
Der vollständige Code der Hauptklasse
Kopieren Sie den Codecode wie folgt:
Paket com.diguage.books.concurrencycookbook.chapter1.recipe1;
/**
* Datum: 13.09.2013
* Zeit: 19:46
*/
öffentliche Klasse Main {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Rechner Rechner = neuer Rechner(i);
Thread thread = neuer Thread(Rechner);
thread.start();
}
}
}