用于处理java中的并发数据插入的类

时间:2012-02-01 16:27:48

标签: java insert java.util.concurrent

将有500多个线程同时将唯一对象上传到存储桶。

在这种情况下,我应该使用哪个数据结构/类来实现java中的存储桶。

仅供参考:

我尝试使用ArrayList,Vector,ConcurrentHashMap,ArrayBlockingQueue,LinkedBlockingQueue。

ArrayList失败,因为它不是线程安全的。   Vector会占用更多插入时间。 (因为获取监视器锁定的等待时间很长)

...最后,我使用了ArrayBlockingQueue,这在比较其他方面听起来不错。

如果此案例中存在任何其他良好的类/数据结构,请建议我。

3 个答案:

答案 0 :(得分:2)

争用将非常高,因此您可能希望查看可用的无锁等待实现,或者 - 保持简单 - 使用ConcurrentHashMap。

锁定条带化是这里的关键优势,因此对于读取操作,您没有锁定,对于写入操作,您只锁定现有存储桶的子集,并且仅锁定整个哈希表以进行重新散列。

您可以在这里找到更多信息:

Performance ConcurrentHashmap vs HashMap

Java Hashtable many accesses problem

答案 1 :(得分:1)

您正在做出正确的决定来衡量绩效。

一般来说,LinkedBlockingQueue对于并发访问比ArrayListBlockingQueue表现更好,所以我肯定会尝试。

答案 2 :(得分:1)

这实际上取决于添加内容后或添加内容时要执行的操作。你首先需要考虑这个问题。

在可以想象的最简单的情况下,您可能希望稍后以特定顺序迭代对象。如果是这种情况,ConcurrentLinkedQueue在插入性能方面可能是最好的。