2013-03-05 97 views
0

我必须坚持持续传入的消息流。出于性能方面的原因,我等到我有一个合理的消息发送到数据库之前。我将这些消息保存在集合C中。每当在数据库中添加消息时,JMS都会收到通知。Java设计多线程

我想就这两个存在于数据库中的对象的查询这是C.

是否有一个共同的设计模式来解决这个问题的呢?我是否需要在内存中保存一个集合中的数据库副本?如果我尝试读取数据库的内容,然后查看C的内容,然后将它们放在一起以对此融合进行查询,那么如何确保另一个线程没有清空C并将其放入数据库?

感谢

+1

可以请你解释一个例子吗? “我想对数据库中存在的对象和C中的对象进行查询,这是什么意思?详细一点。 – 2013-03-05 06:22:04

+0

为什么你需要结合数据库和队列?消息如何被提交给数据库?更新?插?删除?查询有多复杂? – didierc 2013-03-05 22:43:03

回答

1

如果要查询数据(可能是SQL SELECT)将不得不将该集合刷新到数据库。

你必须至少有两种选择:

1)锁定了一个互斥DB访问。当你需要查询,锁定,将收集刷新到数据库,查询,解锁。

2)在消息中设计处理集合/ DB的线程的输入队列,该集合/ DB指示将集合刷新到DB,刷新时发出'FlushComplete'condvar信号,然后等待另一个'继续' condvar。排队消息,等待FlushComplete,查询,信号继续。

我可能会去(2)。

0

你有没有尝试使用AKKA?这是一个非常易于使用的代理系统,它可以轻松解决您的问题,并在想要使用异步系统和多线程时提供一些良好的设计模式。