2013-07-09 23 views
13

Tôi cần một Bản đồ an toàn có thể thay đổi được và một danh sách an toàn có thể thay đổi trong Danh sách ở Scala. Tôi biết rằng các bộ sưu tập bất biến là chủ đề an toàn theo mặc định. Nhưng, tôi cần cập nhật bộ sưu tập của mình rất thường xuyên vì tôi không thể sử dụng bất biến. Ngoài ra tôi cần bản đồ có thể thay đổi của tôi để duy trì thứ tự chèn.Scala - Bộ sưu tập an toàn có thể thay đổi chủ đề

Ngay bây giờ là sử dụng bản đồ dưới đây

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

Bản đồ này duy trì trật tự chèn và có thể thay đổi. Làm thế nào để làm cho nó thread an toàn?

+0

bản sao có thể có của [Bản đồ an toàn chủ đề giữ nguyên thứ tự chèn] (http://stackoverflow.com/questions/17540467/thread-safe-map-which-preserves-the-insertion-order) – 4lex1v

+0

@AlexIv không phải là trùng lặp trong ý nghĩa hoàn toàn - rahul hỏi về Danh sách quá –

+0

@ om-nom-nom dù sao nó có thể được sửa đổi, nhưng tạo ra một câu hỏi mới là vượt quá – 4lex1v

Trả lời

15
  1. You're duplicating topics....
  2. Như đã đề cập bởi AlexIv in his answer, có một đặc điểm bạn có thể trộn nếu bạn muốn an toàn thread. Có một cách khác mặc dù:

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

Điều đó sẽ cung cấp cho bạn map with synchronization on each access. Dễ dàng, nhưng có thể không đáp ứng các yêu cầu về hiệu suất. Nếu có, sẽ dễ dàng hơn khi tạo lớp tùy chỉnh mở rộng LinkedHashMap, trộn trong concurrent.Map trait (as was suggested) và cung cấp việc triển khai các phương pháp có liên quan, ví dụ: putIfAbsent, removereplace (2 lần tải).

+17

Nếu bạn có thể làm việc nhiều hơn một chút, sử dụng phương pháp 'sync' trên mutable bộ sưu tập trực tiếp nơi bạn cần an toàn chủ đề. Nó sẽ giúp bạn tiết kiệm hiệu suất hit mà mixin này mang lại. Ví dụ. 'someMap.synchronized {someMap + = (" someKey "," anyValue ")}' – tysonjh

+7

Đối với bất kỳ ai mới xem nội dung này, đặc điểm Bản đồ đồng bộ hóa đã không được chấp nhận vì không đủ an toàn. Đề xuất sử dụng bộ sưu tập an toàn chủ đề Java. – patwhite

+0

@patwhite: bất kỳ liên kết bên ngoài nào về điều này? Có vẻ quan trọng ... – Gepp

Các vấn đề liên quan