Der Unterschied zwischen Thread Execute() und Submit()

Es gibt zwei Methoden zum Übermitteln von Aufgaben im Thread-Pool

Die zwei Möglichkeiten, Aufgaben an den Thread-Pool zu senden, sind ungefähr die folgenden:
Methode 1: Rufen Sie die Methodeexecute() auf

Methode 2: Rufen Sie die Methode „submit()“ auf

1. Unterschied

Was ist der Unterschied zwischen den oben genannten Methoden „submit()“ und „execute()“? Es gibt grob drei Punkte:

1. Die von den beiden empfangenen Parameter sind unterschiedlich

Die Execute()-Methode kann nur Parameter des Typs „Runnable“ empfangen, während die Methode „submit()“ sowohl Parameter des Typs „Callable“ als auch „Runnable“ empfangen kann. Aufgaben vom Typ „Callable“ können Ausführungsergebnisse zurückgeben, Aufgaben vom Typ „Runnable“ können jedoch keine Ausführungsergebnisse zurückgeben. Callable ist eine von JDK 1.5 hinzugefügte Ausführungszielschnittstelle. Als Ergänzung zu Runnable ermöglicht es Rückgabewerte und löst Ausnahmen aus. Der Hauptunterschied zwischen Runnable und Callable ist: Callable lässt Rückgabewerte zu, während Runnable keine Rückgabewerte zulässt; Runnable lässt das Auslösen von Ausnahmen nicht zu, während Callable das Auslösen von Ausnahmen zulässt.

2.submit() hat nach dem Absenden der Aufgabe einen Rückgabewert,execute() jedoch nicht

Die Methodeexecute () wird hauptsächlich zum Starten der Ausführung der Aufgabe verwendet, und der Aufrufer kümmert sich nicht um das Ausführungsergebnis der Aufgabe und mögliche Ausnahmen. Die Methode „submit()“ wird auch verwendet, um die Ausführung der Aufgabe zu starten. Nach dem Start gibt sie jedoch ein Future-Objekt zurück, das eine asynchrone Ausführungsinstanz darstellt, und das Ergebnis kann über die asynchrone Ausführungsinstanz abgerufen werden.

Submit ist akzeptabel, unabhängig davon, ob es sich um eine ausführbare oder aufrufbare Aufgabe handelt, aber der Rückgabewert von Runnable ist void , sodass das durch die Verwendung von Futures get() erhaltene Ergebnis immer noch null ist

3.submit() ist praktisch für die Ausnahmebehandlung

Nachdem die Methodeexecute() die Aufgabenausführung gestartet hat, kümmert sich der Aufrufer nicht um die Ausnahmen, die während der Aufgabenausführung auftreten können. Das von der Methode „submit()“ zurückgegebene Future-Objekt (asynchrone Ausführungsinstanz) kann Ausnahmen während der asynchronen Ausführung erfassen.

2. Kontakt

In der Implementierung der ThreadPoolExecutor-Klasse ist die interne Methode zum Senden von Kernaufgaben die Methode „execute()“. Obwohl das Benutzerprogramm Aufgaben auch über „submit()“ senden kann, wird tatsächlich die Methode „execute()“ schließlich in der Methode „submit()“ aufgerufen .

Acho que você gosta

Origin blog.csdn.net/lan861698789/article/details/128805222
Recomendado
Clasificación