3

同じプロセス内で実行されている 2 つのスレッド a と b があるとします。プロセッサは、Thread.sleep(1000) のようなコード行に到達するまで、a からいくつかの命令を実行し、b からいくつかの命令を実行します。

問題は、プロセッサが次に何をするのかよくわからないことです。私はこれらの2つのシナリオを疑っています:

1)

  • スレッド a は 1000 ミリ秒間スリープを開始します
  • その間、 b が実行されています
  • 1000ミリ秒の間隔が終わったので:
    • プロセッサがまだスレッド b からコードを実行している場合
      • その後、完了するまで待ちます
      • スレッド a からさらにコードを実行します
    • そうしないと
      • スレッド a からさらにコードを実行する

2)

  • スレッド a は 1000 ミリ秒間スリープを開始します
  • その間、 b が実行されています
  • 1000ミリ秒の間隔が終わったので:

    • プロセッサがまだスレッド b からコードを実行している場合

      • スレッド B を停止します。スレッド a の方が優先度が高く、そのコードは終了した 1000 ミリ秒間隔の直後に実行する必要があるためです。
      • スレッド a からさらにコードを実行します
      • 次に、スレッド B からコードを実行します。
    • そうしないと
      • スレッド a からさらにコードを実行する

舞台裏で実際に起こっていることに似ているのはどれですか? 両方とも間違っている場合は、正しい答えを教えてください。

4

2 に答える 2

4

多くの要因が関係するため、質問に対する絶対的な回答を提供することは困難です。

ただし、指定した利用可能なオプションに基づいて、#2が最も近くなります。

次のいずれかのイベントが発生した場合、別のスレッドが呼び出されて実行されます。

....現在実行中のスレッドより優先度
の高いスレッドがRunnable状態になります。優先順位の低いスレッドが横取りされ、優先順位の高いスレッドが実行されるようにスケジュールされます。

これがソースです。

于 2013-03-31T14:49:53.553 に答える