Ron*_*nny 1 java architecture multithreading trading
我想设计一个简单的应用程序(没有 j2ee 和 jms),可以处理大量的消息(比如在交易系统中)
我创建了一个可以接收消息并将它们放入队列的服务,以便系统在过载时不会卡住。
然后我创建了一个包装队列的服务(QueueService),并有一个 pop 方法从队列中弹出一条消息,如果没有消息返回 null,则该方法被标记为“同步”以供下一步使用。
我创建了一个知道如何处理消息的类 (MessageHandler) 和另一个可以在新线程 (MessageListener) 中“侦听”消息的类。该线程有一个“while(true)”,并且一直试图弹出一条消息。
如果返回一条消息,线程调用 MessageHandler 类,当它完成时,他将请求另一条消息。
现在,我已将应用程序配置为打开 10 个 MessageListener 以允许多消息处理。
我现在有 10 个线程,所有时间都在循环中。
这样的设计好吗??
任何人都可以参考一些书籍或网站如何处理这种情况?
谢谢,罗尼
从您的描述看来,您走在正确的道路上,只有一个小例外。您在从队列中检索消息时实现了忙等待。
更好的方法是在同步popMessage()方法中阻塞线程,wait()当没有更多消息可以弹出时对队列资源执行 a 。当向队列添加 (a) 条消息时,等待的线程通过 a 唤醒notifyAll(),一个或多个线程将收到一条消息,其余线程重新进入wait()状态。
这样CPU资源的分配会更顺畅。