0

次のシナリオがあり、コンテキストの切り替えがいつ発生するかを知りたいと考えています。

シナリオ 1: Java スレッドがオブジェクトの待機を呼び出しましたが、そのスレッドのタイム スライスがまだ残っています。

シナリオ 2: - Java スレッドがデータベース クエリの結果を待機していますが、そのスレッドのタイム スライスがまだ残っています。

シナリオ 3: - Java スレッドがデータベース クエリの結果を待機していますが、そのスレッドのタイム スライスはまだ終了しています。

シナリオ 4:-Java スレッドが何らかの計算を行っていますが、そのスレッドのタイム スライスはまだ終了しています。

コンテキスト切り替えが発生する可能性がある他のシナリオはありますが、私はそれを見逃していますか?

これらのシナリオを使用して、スレッド プールのサイズが Runtime.getRuntime.availableProcessors() よりも大きくなる可能性があるかどうかを確認することを考えています。

4

1 に答える 1

1

スレッドが呼び出しなどの処理を行っている場合wait()、これはタイム スライスが使い果たされていないことを意味します。を呼び出したためにスレッドがブロックされた場合wait()、または I/O 結果 (データベースの結果を含む) を待機している場合、タイム スライスはカウントされません。スレッドのブロックが解除されるとすぐにカウントを開始し、実行を再開します。タイム スライスが使い果たされた場合、これは、スレッドが常に実行されており、ブロックされていないことを意味します。

その結果、シナリオの分類が正しくありません。

于 2013-04-02T14:27:34.617 に答える