Warum ExecutorService Future? absenden (ausführbare Aufgabe)?

9

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)

    
Roland 15.05.2017, 08:07
quelle

3 Antworten

1

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.

    
Konstantine 15.05.2017 08:27
quelle
1

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%     
gati sahu 15.05.2017 08:27
quelle
1

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?

%Vor%

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.

    
Burak Akyıldız 15.05.2017 08:15
quelle