Die ExecutorService hat die folgende Methode:
Zukunft & lt;? & gt; Absenden (ausführbare Aufgabe)
Aber da diese Methode Future
get
immer null
zurückgibt, wäre die folgende Signatur nicht geeigneter?
Future<Void> submit(Runnable task)
Beachten Sie, dass Runnable
s run
Methode void
primitive und nicht Void
type zurückgibt. Aus diesem Grund kann Future
keinen Typ Void
haben und die Lösung bestand darin, es zu einem Platzhalter zu machen. Beachten Sie, dass Future
aus Java 1.5 stammt, während Runnable
auf 1.0 steht. Sie würden den Rückgabetyp von run
nicht ändern, um dem Future
aufgrund von Legacy-Code-Gründen zu entsprechen.
Jdk 1.8 innerhalb submit Methodenimplementierung void wird verwendet, während in jdk1.6 war es Object .My Verständnis ist es angemessener ist, void zu verwenden, deshalb wird es in jdk1.7 / 1.8 geändert.Nur zur Unterstützung der Schnittstelle nicht zu ändern es
%Vor%und in JDK 1.6
%Vor% Weil ExecutorService
's Future
interface erstellt wurde, um Rückgabedaten von einem anderen Thread abzurufen und nicht einfach auszuführen.
Future<Void> submit(Runnable task)
funktioniert genauso wie new Thread(runnable).start()
, die Rückgabe von null
ist in einigen Fällen sinnvoll.
Bearbeiten:
Denken Sie, dass Sie nach 20 Minuten einen Thread schließen müssen. Wie würden Sie das tun, wenn Sie einen Rückgabewert void
haben?
Dieser Code muss einen Fehler enthalten, da für future
keine Rückgabe erfolgt. Aber wenn es eine Null zurückgibt, wird das execService
Controller-Objekt wissen, dass shutdown
passiert ist. Oder wenn in 20 Minuten nichts zurückgegeben wird, kann execService.shutdownNow()
verwendet werden.
Tags und Links java multithreading asynchronous future executorservice