Stellen Sie sich ein Produzenten-Verbraucher-Szenario vor, Thread A erzeugt Einträge, die von vielen anderen Threads konsumiert werden.
Dafür übergebe ich ein Bündel von Einträgen an jeden Verbraucherthread.
Um dies zu tun, frage ich mich, ob es günstiger ist (hauptsächlich im Hinblick auf die CPU-Auslastung, sekundär im Speicher):
- jedem Verbraucherthread eine separate Instanz einer
HashMap
zur Verfügung zu stellen. Nachdem dieMap
an einen Verbraucher übergeben wurde, wird eine neue Instanz derMap
erstellt und für das Weitergeben der nächsten erzeugten Einträge an den nächsten Thread verwendet
oder
- ein einzelnes
ConcurrentHashMap
zu verwenden und für jeden Verbraucherthread einenIterator
zu erstellen und nachdem derIterator
an den Thread übergeben wurde, dieMap
zu löschen - so dass jeder Iterator seine eigene Ansicht der zugrunde liegendenMap
enthält.
Was denkst du? Ist eine mehr oder weniger generische Antwort möglich?
Oder hängt es stark von einigen Variablen wie Anzahl der Einträge, Threads usw. ab?
BEARBEITEN: Oder sollte ich eine andere Art von Datenstruktur verwenden, die diese Art von Problemen besser lösen kann?