我們有一個基於java的多線程corba服務器應用程序,其中一個線程負責接收通過corba調用從其他應用程序發送的通知。處於WAITING狀態的線程是否可以無限期等待
問題是通知沒有通過負責發送的應用程序處理髮送通知。
我已經採取了幾個使用jstack的線程轉儲,並在所有jstacks中觀察到相同的WAITING狀態下的線程。我知道由VC代理創建的第一個線程是一個工作線程,它將發出第二個線程(NotificationConsumer線程)的信號。但是我的疑問是,第一個線程(下面首先顯示)處於WAITING狀態,可能在從receiveBatchEvent()方法跨越的unix進程的對象監視器上。因爲unix過程變成了不可用的過程,線程會一直處於WAITING模式嗎?
"VBJ ThreadPool Worker id=4 se=unsecure scm=iiop_tp orb=419d05" daemon prio=3 tid=0x087c3c00 lwp=62 nid=0x3e in Object.wait() [0xea6ee000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at java.lang.UNIXProcess.waitFor(UNIXProcess.java:115)
- locked <0xf3495028> (a java.lang.UNIXProcess)
at com.ericsson.nms.fm.ims.eim.plugin.NrmNotificationConsumer.receiveBatchEvent(Unknown Source)
at com.ericsson.nms.cif.na.server.SequencePushConsumerImpl.push_structured_events(SequencePushConsumerImpl.java:45)
at org.omg.CosNotifyComm.SequencePushConsumerPOA._invoke(SequencePushConsumerPOA.java:60)
at org.omg.CosNotifyComm.SequencePushConsumerPOA._invoke(SequencePushConsumerPOA.java:40)
at com.inprise.vbroker.poa.POAImpl.invoke(Unknown Source)
at com.inprise.vbroker.poa.ActivationRecord.invoke(Unknown Source)
at com.inprise.vbroker.GIOP.GiopProtocolAdapter.doRequest(Unknown Source)
at com.inprise.vbroker.IIOP.ServerProtocolAdapter.doRequest(Unknown Source)
at com.inprise.vbroker.GIOP.GiopProtocolAdapter.dispatchMessage(Unknown Source)
at com.inprise.vbroker.orb.TPDispatcherImpl$TPDispatcher.run(Unknown Source)
at com.inprise.vbroker.orb.ThreadPool$PoolWorker.run(Unknown Source)
-----------------------------------------------------------------------------------
nid=0x28 in Object.wait() [0xeae9d000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at com.ericsson.nms.fm.ims.eim.plugin.NrmNotificationConsumer$NotificationConsumer.synchronizedWait(Unknown Source)
- locked <0xf32815a0> (a com.ericsson.nms.fm.ims.eim.plugin.NrmNotificationConsumer$NotificationConsumer)
at com.ericsson.nms.fm.ims.eim.plugin.NrmNotificationConsumer$NotificationConsumer.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
嗨,感謝您的回覆。我還不清楚的是,我們是否可以從第一個線程的棧(VBJ ThreadPool Worker id = 4 se = unsecure scm = iiop_tp orb = 419d05「daemon prio = 3 tid = 0x087c3c00 lwp = 62 nid = 0x3e)不管它處於無限期WAITING狀態,在出現問題的時間間隔爲1小時的時間間隔中出現的幾個jstack中出現相同的線程堆棧 – 2014-10-17 13:15:41
@ViswamDevireddyvijay您無法從該輸出中推斷出,沒有。能夠告訴你它是否會無限期地等待,等待一個鎖被釋放;但是你需要查看代碼來確定帶鎖的代碼是否可以釋放它。 – 2014-10-17 13:28:38