Ich habe in den letzten paar Stunden ziemlich viel darüber gelesen, und ich kann einfach keinen Grund ( gültigen Grund) erkennen, shutdown()
auf den ExecutorService
zuzugreifen, es sei denn, wir haben eine riesige Anwendung, die Dutzende und Dutzende verschiedener Executor-Dienste speichert, für die sie nicht verwendet werden eine lange Zeit.
Das einzige, was das Herunterfahren bewirkt (soweit ich weiß), ist das, was ein normaler Thread tut, sobald es fertig ist. Wenn der normale Thread die Ausführungsmethode von Runnable (oder Callable) beendet, wird sie zur Erfassung an Garbage Collection übergeben. Mit Executor Service werden die Threads einfach angehalten und nicht für die Garbage Collection angekreuzt. Dafür wird das Herunterfahren benötigt.
Ok zurück zu meiner Frage. Gibt es einen Grund, Shutdown ExecutorService
sehr oft oder sogar direkt nach dem Absenden einiger Aufgaben aufzurufen ? Ich möchte den Fall hinter mir lassen, dass jemand es tut und gleich danach anruft, awaitTermination()
da dies bestätigt wird. Sobald wir das tun, müssen wir noch einmal ein neues erstellen ExecutorService
, um dasselbe zu tun. Ist das nicht die ganze Idee für die ExecutorService
, die Threads wiederzuverwenden? Warum also das ExecutorService
so schnell zerstören ?
Ist es nicht eine rationale Methode, einfach zu erstellen ExecutorService
(oder zu koppeln, je nachdem, wie viele Sie benötigen), dann während der Ausführung der Anwendung die Aufgaben an sie weiterzugeben, sobald sie ausgeführt werden, und dann beim Beenden der Anwendung oder in einigen anderen wichtigen Phasen diese Ausführenden herunterzufahren ?
Ich möchte eine Antwort von einigen erfahrenen Programmierern erhalten, die mit ExecutorServices viel asynchronen Code schreiben.
Zweite Nebenfrage, etwas kleiner befasst sich mit Android-Plattform. WENN einige von Ihnen sagen, dass es nicht die beste Idee ist, Executoren jedes Mal herunterzufahren und auf Android zu programmieren, können Sie mir sagen, wie Sie mit diesen Shutdowns umgehen (um genau zu sein - wenn Sie sie ausführen), wenn wir mit verschiedenen Ereignissen von Anwendungslebenszyklus.
Aufgrund des CommonsWare-Kommentars habe ich den Beitrag neutral gemacht. Ich bin wirklich nicht daran interessiert, darüber zu Tode zu streiten, und es scheint, dass es dorthin führt. Ich bin nur daran interessiert zu erfahren, was ich hier von erfahrenen Entwicklern gefragt habe, wenn sie bereit sind, ihre Erfahrungen zu teilen. Vielen Dank.