2

私はこのことについて非常に興味があります。SDK メソッドを呼び出す同期ブロックにコードが
ありますが、ハングします。

synchronized(someObject) {
   someSDKobj.someMethd();
}

非同期ブロックから同じ呼び出しを行うと、正しく実行されます。

//synchronized(someObject) 
{
   someSDKobj.someMethd();
}

ハングする理由の 1 つは、sdk メソッドが別のスレッドで、同じ「someObject」で同期する別のメソッドを呼び出す場合ですが、そうではありません。

他に何がこの奇妙な現象を引き起こす可能性がありますか? 呼び出されたメソッドが同期ブロックから呼び出されたという事実によって影響を受けるのはなぜですか? 問題があれば、これは Java-ME で実行されています。

4

2 に答える 2

3

「デッドロック」と呼ばれる状態を作成したため、ハングします。問題は、同期されたメソッドに一度にアクセスできるスレッドが 1 つだけであることです。したがって、メソッドはこの同期メソッドにアクセスし、ロックされている同じメソッドにアクセスするために別のスレッドを呼び出しています。そのため、2 番目のスレッドは関数が他のスレッドによって解放されるのを待っていますが、これは決して起こりません。

于 2012-04-19T09:11:03.377 に答える
0

ハングしたときにスレッド ダンプを取得します。これにより、ロックの競合を指摘するなど、JVM の各スレッドで何が起こっているかがわかります。

于 2012-04-19T13:44:18.097 に答える