gpt4 book ai didi

java - Session.sendToTarget() 线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 07:40:30 26 4
gpt4 key购买 nike

我正在尝试将 QFJ 集成到单线程应用程序中。起初我试图将 QFJ 与我自己的 TCP 层一起使用,但我无法解决这个问题。现在我只是想整合一个启动器。根据我对 QFJ 的研究,我认为整体设计应该如下:
enter image description here
应用程序将不再是单线程的,因为 QFJ 发起程序将创建线程,因此需要一些同步。
在这里,我使用的是 SocketInitiator(我只处理一个 FIX session ),但如果我稍后再使用线程版本,我希望有类似的设置。
将启动器集成到我的应用程序中有两个方面:

  • 接收方(fromApp 回调):我相信这很简单,我只是将消息推送到 MainProcessThread 使用的线程安全队列。
  • 发送方:我正在努力寻找这方面的文档。我应该如何处理同步?从 MainProcessThread 调用 Session.sendToTarget() 是否安全?还是我需要进行一些同步?
  • 最佳答案

    正如迈克尔已经说过的,调用 Session.sendToTarget() 是完全安全的。来自多个线程,甚至是同时的。但据我所知,无论如何你只使用一个线程(MainProcessThread)。Session 的相关部分类在方法 sendRaw() :

        private boolean sendRaw(Message message, int num) {
    // sequence number must be locked until application
    // callback returns since it may be effectively rolled
    // back if the callback fails.
    state.lockSenderMsgSeqNum();
    try {
    .... some logic here
    } finally {
    state.unlockSenderMsgSeqNum();
    }
    其他要点:

    Here I am using an SocketInitiator (I only handle a single FIX session), but I would expect a similar setup should I go for the threaded version later on.


    你会一直只用一个 Session ?如果是,那么使用 ThreadedSocketInitiator 是没有用的。因为它所做的只是为每个 session 创建一个线程。

    The application will no longer be single threaded, since the QFJ initiator will create threads


    正如这里所说的 Use own TCP layer implementation with QuickFIX/J您可以尝试传递 ExecutorFactory .但这可能不适用于您的特定用例。

    关于java - Session.sendToTarget() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67507353/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com