我正在寻找一种高效的方法来实现并发树形结构。如果有帮助的话,可以假设我需要对该结构进行更多的读取操作而非更改操作。
该树应支持以下操作:
- 添加和删除节点
- 每次插入新节点时都要排序分支
- 遍历所有节点(不会出现 ConcurrentModificationException)
- 按路径查找元素
我正在寻找一种高效的方法来实现并发树形结构。如果有帮助的话,可以假设我需要对该结构进行更多的读取操作而非更改操作。
该树应支持以下操作:
在Java中,与您可能需要的最接近的结构是ConcurrentSkipListSet(或者可能是ConcurrentSkipListMap)。
如果您需要更自定义的方法,可以实现一个自定义树形结构,如果您有一个分层的读写锁。以下是类似问题的答案,介绍如何实现可重入的读写锁:https://dev59.com/WlfUa4cB1Zd3GeqPJ6a2#6154873
TreeMap
共享一个通用属性,那就是它是一个排序映射 - 这在这里并不相关。 - Marko TopolnikConcurrentSkipListSet
不是更好的工具来实现单个节点的子容器吗? - Marko Topolnik读写锁的基本概念
对于所有写入方法,请使用以下习语:
someWriteMethod(){
writeLock.lock();
// logic
writeLock.unlock();
}
对于所有的读取方法,请使用相似的代码:
someReadMethod(){
readLock.lock();
// logic
readLock.unlock();
}
请注意,如果您的代码(替换上面的逻辑注释)可能会抛出异常,请确保在finally部分中退出方法之前释放锁定。