Besteht .awaitTermination () vor der Arbeit im Executor?

10

Frage, die ich seit Jahren habe: In diesem Pseudocode,

%Vor%

.awaitTermination() ist nicht dokumentiert, da passiert, bevor zwischen Code A & amp; B. Gibt es einen Grund, warum es nicht ist?

Der ExecutorService und Gleichzeitiges Paket javadocs define happes-before zwischen den Tasks und der Arbeit vor wurden sie übergeben, aber nicht zwischen Executor-Tasks und Code nach einem erfolgreichen .awaitTermination() -Aufruf.

Beachten Sie, dass ich nicht nach Designkritiken gefragt habe, wie ich meinen Code restrukturieren kann, um dokumentierte Vorkommnisse zu nutzen. Meine Frage hier ist, gibt es einen Grund, warum die Ärzte in dieser Situation nicht erwähnen, was passiert ist?

(Beachten Sie, dass dies kein Duplikat von ist 22665198 trotz des sehr treffenden Titels.)

    
tariksbl 02.06.2015, 19:48
quelle

2 Antworten

2

ExecutionService , bist du sicher? Meintest Du ExecutorService ? Außerdem gibt es keine Methode ExecutorService.awaitTermination() ohne Parameter. Die ExecutorService.awaitTermination(long, TimeUnit) -Methode empfängt die Wartezeit bis zum Timeout. Offensichtlich kann es, wenn es wegen des Timeouts zurückkehrt, die "happen-before" -Beziehung nicht garantieren, daher kann es diese Garantie in seinem Vertrag nicht ankündigen, weil es nicht für alle Fälle da ist.

    
Sergey Petunin 02.06.2015 20:03
quelle
-1

Tatsächlich liegen Sie falsch, wie es dokumentiert ist

  

Blockiert, bis alle Tasks die Ausführung abgeschlossen haben, nachdem & gt eine Shutdown-Anforderung oder die Zeitüberschreitung aufgetreten ist oder der aktuelle Thread unterbrochen wird, je nachdem, was zuerst eintritt.

Es ist also garantiert, dass entweder eine Aufgabe abgeschlossen wird oder eine Zeitüberschreitung auftritt. Die Sache ist, dass wir diese Situationen nur unterscheiden müssen, indem wir den Rückgabewert von awaitTermination method überprüfen. Es wird wahr sein, wenn Aufgaben abgeschlossen sind. False bei Timeout oder Unterbrechung.

    
Antoniossss 03.06.2015 00:33
quelle