同じプロセス内で実行されている 2 つのスレッド a と b があるとします。プロセッサは、Thread.sleep(1000) のようなコード行に到達するまで、a からいくつかの命令を実行し、b からいくつかの命令を実行します。
問題は、プロセッサが次に何をするのかよくわからないことです。私はこれらの2つのシナリオを疑っています:
1)
- スレッド a は 1000 ミリ秒間スリープを開始します
- その間、 b が実行されています
- 1000ミリ秒の間隔が終わったので:
- プロセッサがまだスレッド b からコードを実行している場合
- その後、完了するまで待ちます
- スレッド a からさらにコードを実行します
- そうしないと
- スレッド a からさらにコードを実行する
- プロセッサがまだスレッド b からコードを実行している場合
2)
- スレッド a は 1000 ミリ秒間スリープを開始します
- その間、 b が実行されています
1000ミリ秒の間隔が終わったので:
プロセッサがまだスレッド b からコードを実行している場合
- スレッド B を停止します。スレッド a の方が優先度が高く、そのコードは終了した 1000 ミリ秒間隔の直後に実行する必要があるためです。
- スレッド a からさらにコードを実行します
- 次に、スレッド B からコードを実行します。
- そうしないと
- スレッド a からさらにコードを実行する
舞台裏で実際に起こっていることに似ているのはどれですか? 両方とも間違っている場合は、正しい答えを教えてください。