无法从Hazelcast队列中检查对象

时间:2014-09-29 11:07:29

标签: java hazelcast

我创建了一个队列。我在这里放了一些东西。我的目的是在插入之前检查每个对象,以避免重复条目添加到队列。所以我使用的是contains()方法。但是对于相同的条目,它返回false值。我也重写方法equals和hashCode。请帮忙。

1 个答案:

答案 0 :(得分:0)

Hazelcast根据二进制内容检查等于,并且不使用你的equals / hash。在某些情况下,这会导致问题,例如如果您在结构中使用hashmap并将其序列化。相同的对象可能导致不同的字节内容。要处理此问题,您可以考虑使用自定义序列化API之一的Hazelcast,如DataSerializable,并且不要使用java serializable。

另一个问题是你的方法本身就是种族:

if(!queue.contains(item)){
    queue.put(item)
}

contains和put不是原子的,因此可能是2个线程同时调用同一项的contains,并且都决定该项不在队列中并且都添加它。

在这种情况下,队列可能不是你的朋友,IMap更灵活。在你的情况下,你不关心价值观,所以你可以这样做:

 map.put(item,item)

如果您的商品非常大,请使用无意义的值。