15

Thread.sleep()現在実行中のスレッドを指定された時間一時停止し、その後実行可能状態に戻って実行の順番を待つことを読みました。

また、synchronizedコンテキストから呼び出された場合、sleep()保持しているロックを解放しません。だから、いつロックが解除されるのだろうと思っていました。スレッドがスリープ状態になった場合、実行する機会がないため、スレッドは常にそれ自体でロックを維持し、他のスレッドが同期されたメソッド/ブロックに入る方法を保持します。

有効な質問をしているのかわかりません。しかし、私を助けてください。

4

2 に答える 2

22

だから、いつロックが解除されるのだろうと思っていました。

ブロックを終了するとロックが解除されますが、synchronizedそれより前ではありません。

スレッドがスリープ状態になった場合、実行する機会がないため、スレッドは常にそれ自体でロックを維持し、他のスレッドが同期されたメソッド/ブロックに入る方法を保持します。

簡単に言うと、他のスレッドは、スリープしているスレッドと同じオブジェクトで同期されたコードを入力できません。

Thread.sleep()要約すると、ブロックから呼び出すことsynchronizedはおそらく良い考えではありません。

于 2012-05-19T09:22:28.980 に答える
20

Object.waitの代わりにを使用するとThread.sleep、同期されたブロックからのロックが解放されます。

于 2012-05-19T09:24:01.737 に答える