我打算在几天内开始一个新项目,我想在设计要点上进行一些审查。我应该在Java多线程中使用哪种数据结构?
存在旧的遗留代码,它在内存数据库中使用散列表。有一个线程使用来自文件和套接字的xml提要并填充此散列表,另一个线程进行验证和更新,如果验证成功,则第三个线程将验证的数据保留在数据库中。由于在更新期间性能很差(意味着其他两个线程快速追赶并等待验证线程完成),我计划使用一个concurrenthashmap来为我的解决方案建立原型,并创建多个线程进行验证。我仍处于原型设计阶段,但希望得到一些关于我是否朝着正确方向前进的反馈。先谢谢你。
散列表中的每个条目都是一个集合,它不需要根据散列表中的其他条目进行验证。他们是孤立的。每个记录的验证需要进行一些数据库调用,因此每个记录验证都需要时间。 –
因此,消费者生产商将工作得很好。事实上,它甚至可能在所有三层中都有效。一个线程池可以从队列读取数据并对其进行验证,另一个线程池可以读取已验证的条目并将其保存在数据库中。配置这些线程池以匹配读者线程生成条目的速度。 –
谢谢。我只是意识到这一点 - 我不认为我们将需要存储在一个hashmap中。我可以使用ArrayBlockingQueue来实现消费者/生产者吗?一旦从源读取数据(一旦我的数据被构建),我将发布到ArrayBlockingQueue中,然后消费者线程可以来验证并持久化验证的数据。这会工作吗? –