2013-07-09 10 views
13

Potrzebuję mapy bezpiecznej dla wątków i listy bezpiecznych wątków w Scali. Wiem, że niezmienne kolekcje są domyślnie bezpieczne dla wątków. Ale muszę bardzo często aktualizować moje kolekcje, ponieważ nie mogłem używać niezmiennego. Potrzebuję również mojej mapy zmiennoprzecinkowej, aby zachować kolejność reklam.Scala - kolekcje podlegające bezpiecznym gwintom

am Teraz, korzystając z mapy poniżej

val map = scala.collection.mutable.LinkedHashMap[String,Any]() 

Ta mapa zachowuje kolejność wstawiania i jest zmienny. Jak sprawić, by wątek był bezpieczny?

+0

możliwy duplikat [Bezpieczna mapa wątku, która zachowuje zamówienie reklamowe] (http://stackoverflow.com/questions/17540467/thread-safe-map-which-preserves--insertion-order) – 4lex1v

+0

@AlexIv nie jest duplikat w pełnym znaczeniu - rahul pyta o Listę też o –

+0

@ om-nom-nom i tak można ją zmodyfikować, ale utwórz nowe pytanie to nadmiar – 4lex1v

Odpowiedz

15
  1. You're duplicating topics....
  2. Jak wspomniano przez AlexIv in his answer, jest to cecha można mieszać się, jeśli chcesz bezpieczeństwa wątku. Jest jeszcze inny sposób, choć:

    val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any] 
    

To powinno dać Ci map with synchronization on each access. Łatwe, ale może nie spełniać wymagań wydajności. Jeśli tak, prawdopodobnie łatwiej byłoby utworzyć niestandardową klasę rozszerzającą LinkedHashMap, mieszającą w concurrent.Map trait (as was suggested) i zapewniającą implementację odpowiednich metod, tj.: putIfAbsent, removereplace (2 przeciążenia).

+17

Jeśli możesz znieść trochę więcej pracy, użyj metody 'zsynchronizowanej' na zmiennym zbierania bezpośrednio tam, gdzie potrzebujesz bezpieczeństwa wątku. Zaoszczędzi ci wydajność, którą przynosi ta mieszanka. Na przykład. 'someMap.synchronized {someMap + = (" someKey "," anyValue ")}' – tysonjh

+7

Dla każdego, kto to ostatnio ogląda, cecha SynchronizedMap została uznana za nieadekwatną. Zaleca korzystanie z kolekcji wątków Java. – patwhite

+0

@patwhite: jakikolwiek link zewnętrzny na ten temat? Wydaje się krytyczny ... – Gepp