黑马程序员—多线程的学习(2)

来源:互联网 发布:c语言更相减损术 编辑:程序博客网 时间:2024/05/29 15:49

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

 

在上面的文章中让大家了解了下多线程的相关概念,对多线程有了一个大致的印象,在接下来的文章中我会陆续的给大家继续总结多线程中所要用到的知识,一定要把多线程早日的学号,早日的进入我们心中的黑马训练营!

下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。(线程入口使程序知道该让这个线程干什么事)

C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。

打开你的VS.net,新建一个控制台应用程序(Console Application),编写完全控制一个线程的代码示例:

using System;
using System.Threading;

namespace ThreadTest
{
   
publicclass Alpha
    {
       
publicvoid Beta()
        {
           
while (true)
            {
                Console.WriteLine(
"Alpha.Beta isrunning in its own thread.");
            }
        }
    };

publicclass Simple
{
   
publicstaticint Main()
    {
         Console.WriteLine("Thread Start/Stop/Join Sample");
            Alpha oAlpha =
new Alpha();
       file://这里创建一个线程,使之执行Alpha类的Beta()方法
       Thread oThread =new Thread(newThreadStart(oAlpha.Beta));
       oThread.Start();
       while (!oThread.IsAlive)
             Thread.Sleep(1);
             oThread.Abort();
             oThread.Join();
             Console.WriteLine();
             Console.WriteLine("Alpha.Beta has finished");
             try
             {
               Console.WriteLine("Try to restart the Alpha.Betathread");
               oThread.Start();
             }
             catch (ThreadStateException)
             {
              Console.Write("ThreadStateException trying to restart Alpha.Beta.");
              Console.WriteLine("Expected since aborted threads cannotbe restarted.");
              Console.ReadLine();
             }
           return0;
   }
    }
}

这段程序包含两个类AlphaSimple,在创建线程oThread时我们用指向Alpha.Beta()方法的初始化了ThreadStart代理(delegate)对象,当我们创建的线程oThread调用oThread.Start()方法启动时,实际上程序运行的是Alpha.Beta()方法:

Alpha oAlpha = newAlpha();

Thread oThread =new Thread(new ThreadStart(oAlpha.Beta));

oThread.Start();

然后在Main()函数的while循环中,我们使用静态方法Thread.Sleep()让主线程停了1ms,这段时间CPU转向执行线程oThread。然后我们试图用Thread.Abort()方法终止线程oThread,注意后面的oThread.Join()Thread.Join()方法使主线程等待,直到oThread线程结束。你可以给Thread.Join()方法指定一个int型的参数作为等待的最长时间。之后,我们试图用Thread.Start()方法重新启动线程oThread,但是显然Abort()方法带来的后果是不可恢复的终止线程,所以最后程序会抛出ThreadStateException异常。

 这篇文章就是教大家怎么来操控一个线程,多多练习文章中的代码,相信我们会很好的掌握好多线程,接下来的文章继续给打家总结多线程的知识会给大家带来相关的实例来认识我们的多线程我们一起努力!

 

 

----------------------Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

原创粉丝点击