请教关于多线程的问题
这程序我照书上打的,书上说这程序输出结果应该是2个线程的结果交替的显示出来,可为什么我这显示的结果总是先是main线程的结果,然后才是worker线程的结果?
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace _CSharp_Console
{
class Program
{
static void ShowNumbers()
{
Thread thisThread = Thread.CurrentThread;
Console.WriteLine( "Starting Thread: " + thisThread.Name);
int n = 10000000;
for (int i = 1; i < 8 * n; i++)
{
if (i % n == 0)
Console.WriteLine(thisThread.Name + ":count has reached " + i);
}
}
static void Main(string[] args)
{
Thread thisThread = Thread.CurrentThread;
thisThread.Name = "Main ";
Thread worker = new Thread(delegate()
{
ShowNumbers();
Console.WriteLine( "Worker Thread Finished ");
});
worker.Name = "Worker ";
ShowNumbers(); //主线程调用ShowNumbers函数
worker.Start(); //worker线程调用ShowNumbers函数
Console.WriteLine( "Main Thread Finished ");
Console.ReadLine();
}
}
}
[解决办法]
ShowNumbers(); //主线程调用ShowNumbers函数
worker.Start(); //worker线程调用ShowNumbers函数
等待ShowNumbers()执行完后才会启动work线成
2个位置互换一下。
[解决办法]
你的程序中只有一个线程,并不是多线程。
[解决办法]
将这两行换个位置即可..
ShowNumbers(); //主线程调用ShowNumbers函数
worker.Start(); //worker线程调用ShowNumbers函数
-> > > > > 改成:
worker.Start(); //worker线程调用ShowNumbers函数
ShowNumbers(); //主线程调用ShowNumbers函数
即先启动子线程..
[解决办法]
原因如下:
如果你先调用ShowNumbers方法,然后再启动线程:
ShowNumbers(); //主线程调用ShowNumbers函数
worker.Start(); //worker线程调用ShowNumbers函数
由于你调用ShowNumbers后,主线程会阻塞在这个方法,直到方法返回,才会继续往下执行,即这个方法调用结束后才会执行下面的启动子线程的操作,然后子线程才会运行,就不会表现出交替调用的现象...