我有一个hazelcast实例,它将对象添加到列表中,其他节点删除对象并将对象添加到该列表中。我在代码中没有任何同步。
刚
私人静态列表> ordered = h.getList(“my-distributed-list”);
和节点从有序列表中添加/删除Job。
我应该担心多台机器上的节点之间的同步吗?说100个或更多节点..
答案 0 :(得分:2)
您需要注意以下几点:
列表本身是线程安全的,你不能通过并发访问来破坏它。
但是..如果你的逻辑不是线程安全的,那么这个列表对你没有帮助,例如。
int indexOf = list.indexOf("foo");
if(index!=-1) {
list.remove(indexOf)
}
然后这包含种族问题,因为读取索引和删除具有给定索引的项目不是原子操作。
除了在您自己的逻辑中存在竞争问题之外,过多的竞争线程可能会导致性能/可伸缩性问题,因为列表不是特别修改友好的数据结构。
如果您知道自己在做什么,那么列表可以成为您的朋友。