Hazelcast分布式列表并发

Hazelcast分布式列表并发,hazelcast,Hazelcast,我有一个hazelcast实例将对象添加到列表中,其他节点将对象删除并添加到该列表中。我在代码中没有任何同步 只是 private static List>ordered=h.getList(“我的分布式列表”) 和节点按顺序从列表中添加/删除作业 我应该担心多台机器上节点之间的同步吗?比如说100个或更多节点。有几件事需要注意: 列表本身是线程安全的,您不能通过并发访问破坏它 但是。。如果您的逻辑不是线程安全的,那么该列表将不会帮助您,例如 int indexOf = list.indexOf

我有一个hazelcast实例将对象添加到列表中,其他节点将对象删除并添加到该列表中。我在代码中没有任何同步

只是

private static List>ordered=h.getList(“我的分布式列表”)

和节点按顺序从列表中添加/删除作业


我应该担心多台机器上节点之间的同步吗?比如说100个或更多节点。

有几件事需要注意:

列表本身是线程安全的,您不能通过并发访问破坏它

但是。。如果您的逻辑不是线程安全的,那么该列表将不会帮助您,例如

int indexOf = list.indexOf("foo");
if(index!=-1) {
    list.remove(indexOf)
}
然后这就包含了一个竞争问题,因为读取索引和移除具有给定索引的项不是一个原子操作

除了在您自己的逻辑中存在争用问题外,太多争用线程可能会导致性能/可伸缩性问题,因为列表不是一个特别友好的数据结构


因此,如果您知道自己在做什么,列表可以成为您的朋友。

是的,hazelcast确实提供了一个分布式列表供您使用。但它的并发性必须通过节点间的锁/同步来“处理”。另一方面,地图似乎由hazelcast“处理”。