Java 不同线程之间的数据共享

Java 不同线程之间的数据共享,java,multithreading,concurrency,Java,Multithreading,Concurrency,我有一个方法处于锁定状态(ReentrantLock),这个方法向服务器发送一些消息,立即接收响应,并在数据库中创建/保存数据。 此响应具有已发送消息的id。客户端有一个侦听器,它正在等待来自服务器的报告(此报告可以在数据发送到服务器后返回),服务器还可以返回某种类型的报告(带有id和某些状态),我需要将该报告(按id)映射到上一个保存的记录,并更改该记录的状态字段 问题在于可以更快地返回此报告(侦听器将捕获它并尝试处理),然后将来自第一个方法的消息保存到数据库中解决这个问题的方法是什么? 我想

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

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


我想在数据库中创建额外的表,将消息中的数据保存在一个表中,并将报告中的数据保存到另一个表中。然后通过其他进程同步它们,但可能会创建一些缓冲区/队列,其中存储来自第一个方法的消息id,当我们收到报告时,我们将检查该缓冲区/队列的相应消息id,如果我们找到了该消息id,然后,报告侦听器将继续它的工作?

我认为最好将报告和消息分别存储在数据库中,并在以后链接它们。假设您的数据库做了它的用途,这就减少了数据丢失的机会。此外,您还可以让DB执行锁定/同步这项困难的任务,通常他们在这方面做得很好。

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