2017-06-08 7 views
0

Kann mir jemand in diesem Szenario helfen: Es gibt mehrere Threads lesen & nur ein Thread eine HashMap aktualisieren, sollte ich ConcurrentHashMap und setzen concurrencyLevel als 1 verwenden (da Standardwert von concurrencyLevel 16), oder einfach HashMap verwenden, ohne direkt synchronisiert zu werden?Concurrency Ebene in ConcurrentHashMap in Java

Antwort

0

Wenn Sie die Frage nach der Gleichzeitigkeit ignorieren, gilt als allgemeine Faustregel, dass Sie eine Form der Synchronisation benötigen, wenn Sie den veränderlichen Status (& Schreiben aus mehreren Threads) sicher teilen möchten.

Java gibt Ihnen eine Menge Möglichkeiten, um dies zu erreichen:

  1. Das synchronized Stichwort
  2. Einer der THREAD Sammlungen, wie ConcurrentHashMap
  3. Die verschiedenen Lock Implementierungen
  4. Einer der synchronisierten Sammlung wrappers (zB Collections.synchronizedMap()) - obwohl ich nicht an eine Situation denken kann, wo Sie eigentlich verwenden möchten diese.

Von dem, was wir wissen von Ihrem Anwendungsfall (was nicht viel ist), ist die beste "out-of-the-box" Option wäre ConcurrentHashMap zu verwenden. Es ist nicht erforderlich, dass Sie manuell synchronisieren und wenn Sie es richtig verwenden, kann es Ihren Code threadsafe machen.

Auf der Grundlage der Dokumentation es scheint, dass Sie das concurrencyLevel Argument 1 einstellen möchte, aber das sind Dinge, die Sie können und sollte Test. Abhängig davon, wie viel Konkurrenz Sie tatsächlich haben, spielt es vielleicht keine große Rolle.

Verwandte Themen