下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。线程入口使程序知道该让这个线程干什么事,在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。

  打开你的VS.net,新建一个控制台应用程序(Console Application),下面这些代码将让你体味到完全控制一个线程的无穷乐趣!

  //ThreadTest.cs

  using System;
  using System.Threading;

  namespace ThreadTest
  {
  public class Alpha
    {
      public void Beta()
      {
        while (true)
        {
          Console.WriteLine("Alpha.Beta is running in its own thread.");
        }
      }
    };

    public class Simple
    {
      public static int Main()
      {
        Console.WriteLine("Thread Start/Stop/Join Sample");

        Alpha oAlpha = new Alpha();
        file://这里创建一个线程,使之执行Alpha类的Beta()方法
        Thread oThread = new Thread(new ThreadStart(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.Beta thread");
          oThread.Start();
        }
        catch (ThreadStateException)
        {
          Console.Write("ThreadStateException trying to restart Alpha.Beta. ");
          Console.WriteLine("Expected since aborted threads cannot be restarted.");
          Console.ReadLine();
        }
        return 0;
      }
    }
  }

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

  Alpha oAlpha = new Alpha();
  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异常。

  程序最后得到的结果将如下图:

C#的多线程机制探索2相关推荐

  1. C#的多线程机制探索1

    注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器 ...

  2. C#的多线程机制探索4

    expression代表你希望跟踪的对象,通常是对象引用.一般地,如果你想保护一个类的实例,你可以使用this:如果你希望保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了.而s ...

  3. [ZT]C#的多线程机制探索(2)

    三.线程的同步和通讯--生产者和消费者 假设这样一种情况,两个线程同时维护一个队列,如果一个线程对队列中添加元素,而另外一个线程从队列中取用元素,那么我们称添加元素的线程为生产者,称取用元素的线程 ...

  4. C#的多线程机制探索7

    大家可以看到,在上面的例程中,同步是通过等待Monitor.Pulse()来完成的.首先生产者生产了一个值,而同一时刻消费者处于等待状态,直到收到生产者的"脉冲(Pulse)"通知 ...

  5. C#的多线程机制探索3

    在这里我们要注意的是其它线程都是依附于Main()函数所在的线程的,Main()函数是C#程序的入口,起始线程可以称之为主线程,如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条 ...

  6. C#的多线程机制探索6

    <!-- Please check block file --> 然后在下面这个类MonitorSample的Main()函数中我们要做的就是创建两个线程分别作为生产者和消费者,使用Cel ...

  7. C#的多线程机制探索5

    首先,我们定义一个被操作的对象的类Cell,在这个类里,有两个方法:ReadFromCell()和WriteToCell.消费者线程将调用ReadFromCell()读取cellContents的内容 ...

  8. C#的多线程(2)——机制探索

    注:本文中出现的代码均在.net Framework RC3环境中运行通过 一.多线程的概念 Windows是一个多任务的系统,如果你使用的是windows 2000及 其以上版本,你可以通过任务管理 ...

  9. Java实用教程笔记 Java多线程机制

    Java多线程机制 泛型要考,后来又说不考了 多线程不考 12.1 进程与线程Process and Thread 12.2Java中的线程Threads in Java 线程的状态与生命周期The ...

最新文章

  1. pytorch学习笔记(二):gradien
  2. LETTers比赛第三场 --1003 大明A+B解题报告
  3. [导入] 堆和栈的区别
  4. LeetCode 1272. 删除区间
  5. 暑假攻略:怎样让孩子过一个充实又省钱的假期
  6. access制作封装软件_用Access开发《社工服务管理系统》
  7. 通过Redis的Pub/Sub实现对服务器群的监控管理
  8. 系统学习深度学习(九)--激活函数总结
  9. 如何使用js判断视频是否可以成功访问
  10. LinAlgError: SVD did not converge
  11. 怎么判断二阶导数是否异号_「高等数学」给出函数的二阶导函数图形,求该曲线图形拐点的个数...
  12. 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装
  13. 【转载】DirectX支配游戏!历代GPU架构全解析
  14. 标签打印软件如何设计正反面打印模式
  15. Cadence 16.6快速创建多引脚芯片原理图符号
  16. 云计算是什么?新手学习云计算的学习路线
  17. day 82 Vue学习三之vue组件
  18. 中国目前的人工智能在全球处于什么水平?
  19. PPT文件不能编辑可以这样解决
  20. 未来电竞旗舰:iQOO 8系列售价3799元起

热门文章

  1. 松鼠聚会(洛谷-P3964)
  2. 计算(信息学奥赛一本通-T1356)
  3. 26 FI配置-财务会计-外币评估-定义评估方法
  4. php mongo in 查询语句,PHP 怎么执行mongodb 的 $in 和$size查询
  5. PyTorch:保存/加载训练好的模型测试
  6. linux那些事之gup_flags
  7. linux内核那些事之ZONE
  8. Integer的127与128
  9. Mybatis(17)注解方式增删改查单表
  10. Anaconda下如何创建python2等虚拟环境