线程问题-主程序线程为什么不执行
代码和输出结果如下, 问题是
Child #1 joined.
Child #2 joined.
Child #3 joined.
这三个主程序的语句为什么在最后执行? 当其它线程sleep的时候,主程序还不能执行吗?
为什么? 谢谢!
using System;
using System.Threading;
class MyThread
{
public int count;
public Thread thrd;
public MyThread(string name)
{
count = 0;
thrd = new Thread(run);
thrd.Name = name;
thrd.Start();
}
void run()
{
Console.WriteLine(thrd.Name + " starting.");
do
{
Thread.Sleep(1000);
Console.WriteLine("In " + thrd.Name +
", count is " + count);
count++;
} while (count < 5);
Console.WriteLine(thrd.Name + " terminating.");
}
}
class MainClass
{
public static void Main()
{
Console.WriteLine("Main thread starting.");
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
mt1.thrd.Join();
Console.WriteLine("Child #1 joined.");
mt2.thrd.Join();
Console.WriteLine("Child #2 joined.");
mt3.thrd.Join();
Console.WriteLine("Child #3 joined.");
Console.WriteLine("Main thread ending.");
Console.ReadLine();
}
}
这是输出结果:
Main thread starting.
Child #1 starting.
Child #2 starting.
Child #3 starting.
In Child #2, count is 0
In Child #1, count is 0
In Child #3, count is 0
In Child #2, count is 1
In Child #1, count is 1
In Child #3, count is 1
In Child #2, count is 2
In Child #1, count is 2
In Child #3, count is 2
In Child #2, count is 3
In Child #1, count is 3
In Child #3, count is 3
In Child #2, count is 4
Child #2 terminating.
In Child #1, count is 4
Child #1 terminating.
In Child #3, count is 4
Child #3 terminating.
Child #1 joined.
Child #2 joined.
Child #3 joined.
Main thread ending.