マルチスレッド-Thread.Join

3968 ワード

using System;

using System.Threading;
class MyClass { static void Main(string[] args) { // A Thread ThreadA = new Thread(delegate() { for (int i = 0; i <= 100000000; i++) { if (i % 1000000 == 0) { Console.Write('A'); } } }); // B Thread ThreadB = new Thread(delegate() { for (int i = 0; i <= 50000000; i++) { if (i % 1000000 == 0) { Console.Write('B'); } } // A ThreadA.Join(); for (int i = 0; i <= 50000000; i++) { if (i % 1000000 == 0) { Console.Write('b'); } } }); // ThreadA.Start(); ThreadB.Start(); Console.ReadLine(); } }

 
ThreadクラスのJoin()アクションは,2つの交互に励行するスレッドを順番に励行するスレッドに合わせることができる.例えばスレッドBにおいてスレッドAのJoin()アクションが呼び出されると、スレッドAはスレッドBに挿入される前に、スレッドAの励行が終了するまで、スレッドBを励行し続ける.
実行結果から分かるように,最初は2つのスレッドが交互に行われ,スレッドBが文「ThreadA.Join()」に励行すると,スレッドAがスレッドBに挿入される前に,2つのスレッドが同時に合流し,スレッドAのすべての文が励行されるまで,スレッドBの余裕のある文が励行される順序になる.
つまり、スレッドBでThreadAを呼び出すとJoin()の場合,この措置はスレッドThreadAの励行が終了してから帰ってくる.Join()関数はまた、ミリ秒数を表すパラメータを受け入れることができ、指定された時間に達した後、スレッドAがまだ実行されていない場合、Join関数が戻ってくると、スレッドAとスレッドBが再び交互に実行される事態になる.