java - 使用 Java RealTime 的生产者-消费者架构

标签 java multithreading real-time producer-consumer

我正在使用 Java Realtime (Sun JRTS 2.2) 设计交易系统,并且想询问一些有关最佳实践的问题,因为我担心发明轮子,并且非常确定我的任务已经解决了。

所以我有一个线程连续读取套接字、解析字节并提取消息(二进制协议(protocol))。之后,我应该向算法发送消息,该算法实际上会进行一些计算并决定是否进行交易。

所以我认为我应该设计这个系统的方式是将它分成两部分。生产者(周期性(?)实时线程从套接字中提取字节,解析它)和消费者(实时线程(周期性/零星?)从生产者中提取消息,对其进行操作等)。

所以第一个问题是如何设计这两个线程(生产者/消费者)之间的高性能通信?我也很想听听有关设计此类系统的现有经验、建议等的评论。

感谢您的帮助!

最佳答案

我正在处理类似的问题,但在不同的域中:

这是我的处理方法:

public class Producer extends Thread{
   private BlockingQueue<E> consumerQueue = null;
   public setConsumerQueue(BlockingQueue<E> val){
      consumerQueue = val;
   }
   // main method where data is received from socket...
   public void run(){
      while(!interrupted()){
           data = socket.receive();// Receive data
           if(consumerQueue!=null) consumerQueue.offer(data);
      }
   }
}

public class Consumer extends Thread{
   private BlockingQueue<E> consumerQueue = new BlockingQueue<E>();
   public Consumer (Producer val){
      val.setConsumerQueue(consumerQueue);
   }
   public void run(){
      while(!interrupted()){
           data = consumerQueue.take();// block until there is data from producer
           if(data !=null) processData(data);
      }
   }
}

关于java - 使用 Java RealTime 的生产者-消费者架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300851/

相关文章:

Java在不创建文件的情况下将图像转换为输入流

java - 如何打开 swf 中的链接

c# - 为什么任务取消发生在调用者线程上?

algorithm - Raft算法正常操作

java - XmlSchemaType "date"- 没有时区?

java - 使用mockito的模拟方法,而不是PowerMockito

.net - Synclock 和 WaitOne 的区别

Java并发: safe publication of array

c# - 从 Linux 服务器与 C# 桌面应用程序通信的选项?

c# - 如何使用 C# 在双 Y 轴 ZedGraph 图中添加实时数据?