Java 线程阻塞问题?

Java 线程阻塞问题?,java,multithreading,iso8583,Java,Multithreading,Iso8583,我继承了一个为ATM交换机编写的重写Java项目。我已经在这个项目上工作了3.5个月,试图用Discover Card测试认证应用程序。我对并发性(线程和接收队列)不太熟悉,但我认为我遇到了阻塞问题,无法找到解决问题的方法 下面是发生的情况: 我在开发服务器(Windows 2003)上启动应用程序 我通过Discover网站上名为RCT的WEB应用程序向我的应用程序提交了一条用于动态密钥交换的ISO8583消息(0800),该消息处理得很好。消息停止,接收队列器pereclipse调试器和我的

我继承了一个为ATM交换机编写的重写Java项目。我已经在这个项目上工作了3.5个月,试图用Discover Card测试认证应用程序。我对并发性(线程和接收队列)不太熟悉,但我认为我遇到了阻塞问题,无法找到解决问题的方法

下面是发生的情况:

  • 我在开发服务器(Windows 2003)上启动应用程序
  • 我通过Discover网站上名为RCT的WEB应用程序向我的应用程序提交了一条用于动态密钥交换的ISO8583消息(0800),该消息处理得很好。消息停止,接收队列器pereclipse调试器和我的日志显示它正在等待另一条消息
  • 密钥保存在Discover web应用程序的内存中
  • 我将下一个ISO8583 mesage(0200)提交到我的应用程序中,但我从未看到后续的ISO8583消息甚至出现在我们的应用程序中
  • 我可以通过Wireshark在特定端口上看到后续消息,以进行确认,但它从未到达应用程序入口点。我在应用程序中看到后续消息的位置设置了一个断点,但我从未到达该断点。在Eclipse调试会话中,我看到DiscoverChannel线程正在运行,另外两个receive queuer线程也在运行。它们似乎已打开并准备好接收消息,但消息从未到达应用程序 在Eclipse调试窗口中,我复制了线程堆栈,如果在等待的DiscoveryChannel-ReceiveQueuer-1线程中获取后续请求的问题被DiscoveryChannel-ReceiveQueuer-0线程阻止?这就是我阅读它的方式,但我希望得到一些确认,或者如果错误,如何找到我的问题

    以下是堆栈:

    Thread [DiscoverChannelThread ] (Suspended) 
        waiting for: Socket  (id=82)    
        Object.wait(long) line: not available [native method]   
        Socket(Object).wait() line: 485 
        DiscoverChannel(SwitchChannel).run() line: 1931 
        Thread.run() line: 662  
    Thread [DiscoverChannel-ReceiveQueuer-1] (Suspended)    
        waiting for: DataInputStream  (id=36)   
        DiscoverChannel(SwitchChannel).blockUntilGetMessageBytes(Request, ProcessingTimer) line: 672    
        DiscoverChannel(SwitchChannel).blockUntilReceiveMessage(ProcessingTimer) line: 1330 
        ReceiveQueuer.run() line: 96    
        Thread.run() line: 662  
    Thread [DiscoverChannel-ReceiveQueuer-0] (Suspended)    
        owns: BufferedInputStream  (id=60)  
        owns: DataInputStream  (id=36)  
        SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]    
        SocketInputStream.read(byte[], int, int) line: 129  
        BufferedInputStream.fill() line: 218 [local variables unavailable]  
        BufferedInputStream.read1(byte[], int, int) line: 258   
        BufferedInputStream.read(byte[], int, int) line: 317    
        DataInputStream.readFully(byte[], int, int) line: 178   
        DiscoverChannel(SwitchChannel).blockUntilGetMessageLength() line: 801   
        DiscoverChannel(SwitchChannel).blockUntilGetMessageBytes(Request, ProcessingTimer) line: 673    
        DiscoverChannel(SwitchChannel).blockUntilReceiveMessage(ProcessingTimer) line: 1330 
        ReceiveQueuer.run() line: 96    
        Thread.run() line: 662 [local variables unavailable]
    

    如果您对如何调试此类问题有任何建议/指导,我们将不胜感激。该公司以前的开发人员不再可以询问。我已经处理这个具体问题两周了,找不到解决方案,真的需要一些帮助/指导

    在这里很难遵循您的体系结构,但一般来说,Java web应用程序不应该生成线程或直接使用多线程独立应用程序。我建议重构web应用程序,使所有的信用卡处理都在Java servlet中完成,而不是让它们在一个独立的应用程序中来回运行。

    谢谢你的回复。实际上,这不是一个web应用程序,而是一个独立的应用程序,只在Windows 2003机箱的后台运行。当我说我正在通过Discover web应用程序执行ISO8583消息时,我想我可能混淆了这个问题。我们需要利用他们的web应用在上进行认证,web应用通过一个定义的端口直接连接到我们的DEV box,并将信息传递给我们的独立应用。希望这能澄清问题。我理解很难理解架构。我自己也在试图理解这一点。谢谢。我编辑了我的原始邮件,该邮件被搁置,如下所示。如何修改我的邮件?谢谢