6

次のコードを検討してください。

class ThreadJoinTest{
    public static void main(String[] arguments){
        TimeUnit unit; 
        final Thread taskThread = new Thread(task);
        taskThread.start();
        taskThread.join(unit.millis(timeout));   
     }
}

それで、メインスレッドがtaskThread.join()タイムアウト値で行を実行するとき、メインスレッドはtaskThreadそのタスクを完了するための十分な時間を与えていますか?これが結合メソッドの主な目的ですか?

次の場合はどうなりますか?

  1. taskThreadタイムアウト期間の前に実行を終了しますか?
  2. タイムアウトに達したがtaskThread実行が終了していない場合はどうなりますか?taskThreadタスクを完了するチャンスはありますか?
  3. taskThreadメインスレッドは、正常に終了したため、またはタイムアウトに達したために結合が返されたことをどのように認識しますか?
4

3 に答える 3

6
  1. main完了するとすぐに再開することが許可さtaskThreadれます。
  2. その後main、再開が許可され、taskThread続行されます。両方のスレッドが終了できるようになります。
  3. 正常に終了するか、タイムアウトに達した場合、taskThreadmainは実行を継続します。mainタイムアウトが発生したかどうか、またはtaskThread他の通信手段を使用せずに実行が終了したかどうかを知る方法はありません。
于 2012-07-15T15:40:24.710 に答える
4

join()スレッドで呼び出されると、そのスレッドが終了するのを待ちます(つまり、そのスレッドのrunメソッドが完了するのを待ちます..)。その場合にのみ、以下の行join()が実行されます。ただし、join()内でタイムアウトを指定すると、特定のタイムアウト後にjoin()効果が無効になります。

タイムアウトが発生しますが、taskThreadは作業を終了することができます。

于 2012-07-15T15:38:35.623 に答える
1

タイムアウト条件が優先されます。タイムアウトに達すると、メインスレッドとtaskThreadが同じように実行される可能性が高くなります。

于 2013-07-13T10:55:09.993 に答える