Als Backend-Ingenieur stehen wir vor Situationen, um die Daten asynchron zu verarbeiten. Lassen Sie uns heute sehen, wie es in Java gemacht wird und wie es auf verschiedene Weise geht.

Thread

Die sehr grundlegende und doch so leistungsstarke Komponente der Java-Parallelität ist Thread. Der Thread von Java ist eigentlich mit dem Thread des Betriebssystems verbunden. Die sehr grundlegende Methode zum Erstellen einer Thread ist durch Erweitern und Überschreiben der run :

Das Starten des Threads verursacht die run() heißen.
Sie können fragen; Ja, Thread hat unzählige andere Methoden, die überschrieben werden können:

  • In den meisten Fällen möchten wir andere Methoden des Threads nicht überschreiben.
  • Sobald wir die verlängern Thread -Klasse verliert die erweiternde Klasse ihre Fähigkeit zur weiteren Erweiterung, da Java keine Mehrfachvererbung unterstützt.
  • Jeder Thread hat sein eigenes Objekt, wenn wir es erweitern, und es ist nicht gut für die Speichergesundheit, wenn es Unmengen davon gibt Objects of the extended Thread erstellt.

Java geht diese Probleme mit der Runnable-Schnittstelle an. In der Tat, Thread hat eine überladene Methode, die Runnable akzeptiert.

Runnable

Runnable ist eine Schnittstelle, die nur eine Methode hat: run(). Ja, Runnable ist eine funktionale Schnittstelle, und ihre Instanz kann mit der Lambda-Funktion erstellt werden. Es ist jedoch ein einfacher Weg, dies zu tun; bei komplexen dingen setzen wir es gerne um. Sehen Sie hier den Unterschied. Auf die Anforderung kommt es an:

Runnable hat zwar eine run(), es ist kein Thread, sondern nur eine Java-Klasse, bis es die Kontrolle von Thread übernommen (an) Thread übergeben wird. Das Starten des Threads bewirkt das Ausführen des lauffähigen Objekts run() heißen.

Ja, Java hat es in Version 1.5 gelöst, und es ist Callable.

Callable<V>

Callable ist eine generische Schnittstelle. Wieso den? Der run this-Befehl des Rückgabewerts als generischer run this-Befehl. Callable ist auch eine funktionale Schnittstelle und call() ist die einzige Methode, eine Methode ohne Argumente, die eine Ausnahme auslöst und einen allgemeinen Wert für diesen Befehl zurückgibt.

Die Implementierung von Callable ist Runnable sehr ähnlich:

Siehe hier, der Aufruf verarbeitet die Daten und gibt einen Wert zurück, der nach der Ausführung erfasst werden kann. Aber gibt es einen großen Unterschied beim Aufrufen? Wir gebrauchen ExecutorService aufrufen und Future um das Ergebnis festzuhalten. Lassen Sie uns darüber sprechen, warum.

Wie Sie sehen können, gibt es kein kontrolliertes Verhalten beim Erstellen und Ausführen der Threads (auch Runnable oder Callable). Möglicherweise möchten wir die Anzahl der Threads steuern, die gleichzeitig ausgeführt werden, da jeder von ihnen mit den Threads des Betriebssystems verknüpft ist. Die Anzahl der ausgeführten Threads sollte geringer sein als die Anzahl der verfügbaren CPU-Kerne. Alles in allem löst Java es durch ExecutorService Schnittstelle.
Oben ist ein Informationsartikel über Asynchrone Programmierung in Java: Teil I.
Fühlen Sie sich frei, uns über den Kommentarbereich zu kontaktieren, falls Sie Fragen zu den oben geteilten Anweisungen haben.