Erster Fall: Sagen wir, Sie haben eine Menge Aufgaben, die alle ein Ergebnis irgendeiner Art zurückgeben, lassen Sie es einfach "Ergebnis" für jetzt nennen, und diese müssen alle sein in einer Arraylist gespeichert. Es gibt zwei Möglichkeiten:java concurrency Gemeinsame Daten mit Runnable vs Callable und lokale Daten
1) Erstellen Sie eine Arraylist im Hauptverfahren und verwenden Runnables mit Zugriff auf die freigegebene Liste und einer synchronisierten Methode add
2) eine Arraylist im Hauptverfahren Erstellen und Verwenden von abrufbaren die auszuführen Aufgabe und geben Sie das Ergebnis zurück und lassen Sie die Hauptmethode das Ergebnis zu seiner Liste hinzufügen.
Gibt es irgendwelche Leistungsunterschiede zwischen den beiden, da die runnable Notwendigkeit synchronisiert Zugriffe, aber die Callables nicht?
Dann zum zweiten Fall: Sagen wir jetzt, jede Aufgabe erzeugt eine "kleine" Arraylist, sagen wir weniger als 10 Elemente pro Aufgabe. Dies gibt wiederum zwei Optionen:
1) Eine Arraylist in main und Runnables mit Zugriff auf die freigegebene Liste, die Ergebniselemente hinzufügen, wann immer generiert.
2) Eine ArrayList in main und callables> mit jeweils einer eigenen lokalen Arraylist, die die Ergebnisse speichert, bis die Aufgabe beendet ist und dann in main wird addAll verwendet, um das gefundene Ergebnis hinzuzufügen.
Gleiche Frage wie zuvor, was sind die Leistungsunterschiede?
Aus Gründen der Übersichtlichkeit, Leistung sowohl in Bezug auf die Geschwindigkeit (einige Synchronisationsprobleme etc.) und in Bezug auf Speicher (verwenden die Callables viel mehr Speicher aufgrund der lokalen kleinen Arraylist oder ist dies klein bis vernachlässigbar) ?
Warum braucht man es eine Arraylist sein? –
abhängig von einer Implementierung ist eine schlechte Praxis, müssen Sie sich auf Schnittstellen statt –
Es hängt von Ihrer Arbeitsbelastung. Wenn Sie viele kleine Aufgaben haben, sollten Sie sich Gedanken über den Sperr-Overhead machen. Wenn die Aufgaben lange dauern, sollte die erste Überlegung sauberer/lesbarer Code sein. – waltersu