我应该在Java多线程中使用什么数据结构?

时间:2011-10-10 17:01:01

标签: java multithreading

我计划在几天内启动一个新项目,我想对我的设计点进行一些审核。

旧的遗留代码在内存数据库中使用哈希表。有一个线程从文件和套接字使用xml提要并填充此哈希表,另一个线程进行验证和更新,如果验证成功,第三个线程会在数据库中保留已验证的数据。

由于性能在更新期间挣扎(意味着其他两个线程正在快速赶上并等待验证线程完成),我计划使用concurrenthashmap来构建我的解决方案原型并创建多个线程进行验证。我仍然处于原型设计阶段,但是如果我朝着正确的方向前进,我想得到一些反馈。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我不认为并发哈希映射会有所帮助。我假设您在哈希表中创建了多个条目,并在验证时将它们存储在数据库中。问题是你的持久性线程必须等待验证完成。

如果哈希表中的所有条目都是相互关联的,并且验证者必须检查所有条目 - 除了等待之外,你可以做的事情并不多。

但是,如果您可以在较小的块中分解验证(最简单的情况,如果条目根本不相关),则可以将验证与多个线程并行化,或使用使用者/生产者模式来存储数据。也就是说,一旦验证器完成一个块,它就会将它发布到队列中,持久性线程从队列中读取并存储该块。

如果必须检查所有条目,您可以将它们保存在块中,但如果验证失败则回滚。