2011-12-01 135 views
1

在Java中是否有線程安全的樹實現?我發現了一些建議在add和remove方法中使用synchronized()的信息,但我有興趣查看是否有內置於Java的東西。線程安全樹

編輯:我正在嘗試使用Octree。我只是在學習,但我正在使用這個項目來學習多線程和空間索引,因此我在這裏有很多新的主題。如果有人有一些特別好的參考資料,請分享。

+2

...反對使用java.util.concurrent。*容器作爲基礎?什麼會使「樹」不是線程安全的? – BRFennPocock

+0

什麼樣的樹,爲了什麼目的? B樹,紅黑樹等? –

+1

@BRPocock:同樣的事情會使任何其他數據結構非線程安全:對其狀態進行非同步的非原子併發更新。 –

回答

4

documentation for TreeMap

SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...)); 

注意,這不僅使同步每次調用。在很多情況下,這對於應用程序而言是錯誤的粒度,並且您最好在更高級別進行同步。請參閱docs for synchronizedSortedMap

0

您可以使用Collections.synchronizedSet()synchronizedMap()圍繞各個方法添加同步,但是線程安全並不是數據結構的屬性,而是應用程序的真正屬性。如果遍歷樹,或者執行一系列需要原子操作的操作,則包裝將不夠用。

0

A java.util.concurrent.ConcurrentSkipListMap可能是感興趣的。這對大多數用途來說都是過分的,但如果你需要細粒度的同步,那就沒有什麼比這更好的了。過度殺傷擊敗。當然,這不是一棵樹,而是做同樣的工作。我不相信你可以在真正的樹中獲得低級別的同步。

+0

但是還有一個等價的java.util.concurrent.concurrentSkipListSet也可用。這是完美的這種情況。比使用SyncronizedSet()更有效。 – Linus