首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问关于多线程的有关问题

2012-02-29 
请教关于多线程的问题这程序我照书上打的,书上说这程序输出结果应该是2个线程的结果交替的显示出来,可为什

请教关于多线程的问题
这程序我照书上打的,书上说这程序输出结果应该是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后,主线程会阻塞在这个方法,直到方法返回,才会继续往下执行,即这个方法调用结束后才会执行下面的启动子线程的操作,然后子线程才会运行,就不会表现出交替调用的现象...

热点排行