我對這件事很好奇。我在一個同步塊中有一些代碼,它調用一個SDK方法,但它掛起。爲什麼我的代碼掛起?
synchronized(someObject) {
someSDKobj.someMethd();
}
如果我從一個非同步塊中進行相同的調用,它會正確執行。
//synchronized(someObject)
{
someSDKobj.someMethd();
}
原因之一掛是如果SDK方法進行呼叫時,在不同的線程,到在同一「someObject」同步的另一種方法,但事實並非如此。
還有什麼可以導致這種奇怪的現象?爲什麼被調用的方法會受到來自同步塊的調用的影響?如果它很重要,這是在Java-ME上運行。
請詳細說明您打電話的方法,根本沒有足夠的信息,可能是死鎖或其他問題。 – 2012-04-19 09:13:02
你看到它掛在哪裏嗎?你確定它甚至進入了同步塊嗎?當您不提供可編譯的代碼時,您正在讓社區對所有這些問題感到驚歎。 – 2012-04-19 09:14:22
你確定你需要在你調用該方法的同一個對象上進行同步嗎?它是什麼SDK方法?其他代碼使用該對象? – 2012-04-19 11:55:48