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

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

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

我在两个操作系统上运行的应用程序都使用相同的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();

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

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

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

点赞