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

我应该在Java多线程中使用什么数据结构?,java,multithreading,Java,Multithreading,有一个新的项目,我计划在几天内开始,我想让我的设计点做一些审查 有一个旧的遗留代码使用哈希表作为内存数据库。有一个线程使用来自文件和套接字的xml提要并填充此哈希表,另一个线程执行验证和更新,如果验证成功,第三个线程将验证后的数据保存在数据库中 由于性能在更新过程中受到影响(意味着其他两个线程正在快速追赶并等待验证线程完成),我计划使用concurrenthashmap来原型化我的解决方案,并创建多个验证线程。我仍然在我的原型阶段,但希望得到一些反馈,如果我在正确的方向上。提前谢谢。我认为并发哈

有一个新的项目,我计划在几天内开始,我想让我的设计点做一些审查

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


由于性能在更新过程中受到影响(意味着其他两个线程正在快速追赶并等待验证线程完成),我计划使用concurrenthashmap来原型化我的解决方案,并创建多个验证线程。我仍然在我的原型阶段,但希望得到一些反馈,如果我在正确的方向上。提前谢谢。

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

若哈希表中的所有条目都是相互关联的,并且验证器必须检查所有条目,那个么除了等待,你们并没有什么可做的

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


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

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

若哈希表中的所有条目都是相互关联的,并且验证器必须检查所有条目,那个么除了等待,你们并没有什么可做的

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


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

哈希表中的每个条目都是一个集合,不需要针对哈希表中的其他条目进行验证。他们是独立的。每个记录的验证都需要进行一些db调用,因此每个记录的验证都需要时间。所以消费者生产者可以很好地工作。事实上,它甚至可以跨所有三层工作。一个线程池可以从队列中读取数据并对其进行验证,另一个线程池可以读取已验证的条目并将其保存在数据库中。配置这些线程池以匹配读线程生成条目的速度。谢谢。我也意识到了这一点——我认为我们根本不需要将其存储在hashmap中。我可以使用ArrayBlockingQueue实现消费者/生产者吗?一旦从源读取数据(一旦构建了数据),我将发布到ArrayBlockingQueue中,然后使用者线程就可以来验证并持久化验证过的数据。这行吗?哈希表中的每个条目都是一个集合,不需要对照哈希表中的其他条目进行验证。他们是独立的。每个记录的验证都需要进行一些db调用,因此每个记录的验证都需要时间。所以消费者生产者可以很好地工作。事实上,它甚至可以跨所有三层工作。一个线程池可以从队列中读取数据并对其进行验证,另一个线程池可以读取已验证的条目并将其保存在数据库中。配置这些线程池以匹配读线程生成条目的速度。谢谢。我也意识到了这一点——我认为我们根本不需要将其存储在hashmap中。我可以使用ArrayBlockingQueue实现消费者/生产者吗?一旦从源读取数据(一旦构建了数据),我将发布到ArrayBlockingQueue中,然后使用者线程就可以来验证并持久化验证过的数据。这样行吗?