2014-09-29 17 views
1

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

+0

你是如何覆盖他们的 – Bozho 2014-09-29 12:05:01

+0

是的,重写了这些方法。仍然没有去。 – sayan 2014-09-30 05:42:41

回答

0

Hazelcast根据二进制内容检查等号,并且不使用您的等号/散列。在某些情况下,这可能会导致问题,例如如果你在你的结构中使用HashMap并且序列化它。相同的对象可能导致不同的字节内容。为了解决这个问题,你可以考虑使用Hazelcast的一个自定义序列化API,比如DataSerializable,而不要使用java序列化。

另一个问题是,你的做法是天生的种族:

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

的包含放不是原子,所以它可能是2个线程同时调用包含相同的项目,这两个决定该项目不在队列中并同时添加它。

也许队列不是你的朋友,在这种情况下,IMap更加灵活。在你的情况,你不关心的值,这样你就可以做这样的事情:

map.put(item,item) 

或者,如果你的项目是非常大的使用胡说八道值。