Frage ich für Jahre gehabt haben: In diesem Pseudo-Code,Stellt .awaitTermination() vor, was im Executor ausgeführt wird?
ExecutorService svc = Executors.newFixedThreadPool(3);
svc.submit(new Runnable() { /* code A */ });
svc.shutdown();
if(svc.awaitTermination(...)) {
// code B
.awaitTermination()
ist zwischen Code A & B. nicht dokumentiert als Gründung vor-geschieht Gibt es einen Grund, warum es nicht ist?
Das ExecutorService und concurrent package javadocs definiert passiert-vor zwischen den Aufgaben und Arbeit vor sie eingereicht wurden, aber nicht zwischen Testamentsvollstrecker Aufgaben und Code nach einem erfolgreichen .awaitTermination()
Anruf.
Hinweis, ich frage nicht nach Design-Kritik, wie ich meinen Code restrukturieren kann, um dokumentierte Vorkommnisse zu nutzen. Meine Frage hier ist, gibt es einen Grund, den die Ärzte nicht erwähnen, passiert in dieser Situation?
(Beachten Sie, dass dies nicht ein Duplikat 22665198 trotz des sehr passender Titel.)
Logik diktiert, dass es eine Vorbestellung geben sollte, aber Sie haben Recht OP, ich kann es nirgendwo dokumentiert finden. –
Die einzige "offizielle" Garantie ist, dass wenn Sie die Zukunft mit 'Future > f = svc.submit (...)' UND Sie rufen 'f.get()', dann haben Sie Ihre hb-Beziehung. – assylias
@assylias also, warum ist das? Muss ich wirklich jede Aufgabe ".get()"? Ich weiß, dass ich viel Code geschrieben habe, der davon ausgeht, dass eine erfolgreiche '.awaitTermination()' eingerichtet * passiert-vor *. – tariksbl