Java多线程在Windows中工作,但在Ubuntu中不工作

时间:2013-03-12 10:00:29

标签: java windows multithreading unix

我创建了一个带有“Smack API”(XMPP)和“JAIN SIP”API(SIP)的SIP-XMPP网关。在我的应用程序中,我有三个线程:一个用于发送和接收SIP,一个用于发送和接收XMPP,一个用于存储传入消息的“MessageQueue”,并将它们重定向到相反的协议线程(传入SIP - >传出XMPP,传入XMPP) - >传出SIP)

enter image description here

我目前正在Windows计算机上运行Eclipse中的网关,它完全有效。但是,如果我将Eclipse项目导出到.jar文件并在我的Ubuntu服务器上运行它,传入的消息将存储在消息队列中,但它们不会被重定向。

enter image description here

我在两个操作系统上运行的应用程序都使用相同的JDK版本“1.6.0_14”。我已经读过Java中的线程在Windows和UNIX系统中略有不同。我做错了什么或线程运行不同等待它运行的操作系统?

MessageQueue queue = new MessageQueue();

XMPPMessageListener xmppThread = new XMPPMessageListener();
SIPThread sipThread = new SIPThread();

new Thread(queue).start();

sipThread.setQueue(queue);
xmppThread.setQueue(queue);

queue.setXMPPThread(xmppThread);
queue.setSipThread(sipThread);

new Thread(xmppThread).start();
new Thread(sipThread).start();

1 个答案:

答案 0 :(得分:2)

在两个操作系统上,没有数据争用的无死锁程序应该正常运行。但是,操作系统的不同之处在于,潜在的数据竞争或死锁可能会在一个操作系统上实现,其概率高于另一个操作系统。

您的prgram很可能是正确的并且Windows JVM是正确的,但UNIX JVM有一个错误。

但是,您最好确保您的程序确实正确。根据你所说的,最好的猜测是它挂在MessageQueue线程或sipThread中。线程转储会告诉你更多。