不同线程之间的数据共享

时间:2011-05-27 10:04:47

标签: java multithreading concurrency

我有一个锁定方法(ReentrantLock)这个方法向服务器发送一些消息,立即接收响应并在数据库中创建/保存数据。 此响应具有已发送的消息的ID。客户端有一个等待来自服务器报告的监听器(该报告可以在数据发送到服务器后返回),服务器也可以返回某种报告(带有id和某些状态),我需要将该报告(通过id)映射到该记录的上一个已保存记录和更改状态字段。

问题是可以更快地返回此报告(并且侦听器将抓取它并尝试处理),然后将来自第一种方法的消息保存在数据库中。 解决这个问题的方法是什么?

我有想法在数据库中创建附加表并将消息中的数据保存在一个表中,并将数据从报表保存到其他表中。然后通过其他一些进程同步它们,但也许可以创建一些缓冲区/队列,其中消息ID将从第一个方法存储,当我们收到报告时,我们将检查缓冲区/队列是否有相应的消息ID,如果我们找到了该消息id,那报告监听器会继续它的工作吗?

2 个答案:

答案 0 :(得分:3)

我认为最好将报告和消息分别存储在数据库中,并在以后链接它们。假设您的数据库完成了它的工作,这可以减少数据丢失的可能性。另外,你让DB完成锁定/同步的艰巨任务,通常他们都非常擅长这个。

答案 1 :(得分:0)

我会将数据存储在数据库中,当您想要将消息发送到另一个系统以读取该数据时,请使用JMS发送消息。这样,您可以确保在第二个系统收到消息时所有数据都可用。第二个系统只需要收听消息。