Wenn ich das in main mache, wird es einen neuen Thread erstellen und ihm eine Aufgabe für die asynchrone Berechnung übergeben.
Wenn Sie die FutureTask Dokumentation sehen, heißt es auch:
Eine auflösbare asynchrone Berechnung. Diese Klasse bietet eine Basis Implementierung von Future mit Methoden zum Starten und Abbrechen eines Berechnung, Abfrage, um festzustellen, ob die Berechnung abgeschlossen ist, und abrufen das Ergebnis der Berechnung.
Wie FutureTask
also ein asynchronous computation
ist, erstellt es intern Thread und sendet die Aufgabe, die wir ihm zum Zeitpunkt der Instanziierung von FutureTask
like:
Andernfalls kann es keine asynchrone Berechnung sein. Bitte geben Sie mir das Code-Snippet von FutureTask
Quellcode , in dem die Aufgabe zum Threading übergeben wird, um eine asynchrone Berechnung durchzuführen. Danke.
Ich habe die Antwort bekommen. Es versucht im Grunde, die Aufgabe im selben Thread wie der Aufrufer auszuführen. Es ist ziemlich offensichtlich in dem gegebenen Code:
Wenn Sie futureTask.run()
aufrufen, ruft sie nur sync.innerRun();
auf und sync
ist die Instanz der inneren Klasse Sync
. Dadurch wird nur call()
für das Callable-Objekt im selben Thread aufgerufen.
So, wie FutureTask eine asynchrone Berechnung ist, erstellt es Thread intern und übermittelt die Aufgabe, die wir ihm zum Zeitpunkt der Instanziierung von FutureTask geben, wie:
FutureTask
wurde nicht für die direkte Verwendung durch den Benutzer entwickelt. Es ist so konzipiert, dass es über die Schnittstelle ExecutorService
und die Klassen, die es implementieren, verwendet werden kann. Es sind diese Klassen, die FutureTask
verwenden und die Threads usw. abzweigen. Möglicherweise müssen Sie weitere Informationen zu wie man die ExecutorService
Nebenläufigkeitsklassen verwendet .
Die Klasse ThreadPoolExecutor
ist die Hauptkomponente, die die Verwaltung der Threads im Pool tatsächlich übernimmt. Normalerweise rufen Sie Executors.newCachedThreadPool()
oder Executors.newFixedThreadPool(10)
auf, um eine Instanz davon zu erhalten.
Aus akademischer Sicht erweitert TPE unter dem Deckblatt AbstractExecutorService
und dort können Sie sehen, dass die Klasse FutureTask
verwendet wird, um die Aufgaben im Thread-Pool zu verwalten:
Der Code innerhalb von TPE ist ziemlich kompliziert und es ist nicht einfach, ein "Snippet" zu zeigen, das die asynchronen Aufrufe durchführt. Das TPE sieht, ob es weitere Threads zum Pool hinzufügen muss. Übergibt es an eine Aufgabenwarteschlange, die es entweder ablehnen oder akzeptieren kann, und dann entfernen die Threads die Aufgabe und führen sie im Hintergrund aus.
Tags und Links java multithreading asynchronous futuretask