<!-- Please check block file -->

  然后在下面这个类MonitorSample的Main()函数中我们要做的就是创建两个线程分别作为生产者和消费者,使用CellProd.ThreadRun()方法和CellCons.ThreadRun()方法对同一个Cell对象进行操作。

  public class MonitorSample
  {
  public static void Main(String[] args)
  {
    int result = 0; file://一个标志位,如果是0表示程序没有出错,如果是1表明有错误发生
    Cell cell = new Cell( );

    //下面使用cell初始化CellProd和CellCons两个类,生产和消费次数均为20次
    CellProd prod = new CellProd(cell, 20);
    CellCons cons = new CellCons(cell, 20);

    Thread producer = new Thread(new ThreadStart(prod.ThreadRun));
    Thread consumer = new Thread(new ThreadStart(cons.ThreadRun));
    //生产者线程和消费者线程都已经被创建,但是没有开始执行

    try
    {
    producer.Start( );
    consumer.Start( );

    producer.Join( );
    consumer.Join( );
    Console.ReadLine();
    }
    catch (ThreadStateException e)
    {
    file://当线程因为所处状态的原因而不能执行被请求的操作
    Console.WriteLine(e);
    result = 1;
    }
    catch (ThreadInterruptedException e)
    {
    file://当线程在等待状态的时候中止
    Console.WriteLine(e);
    result = 1;
    }
    //尽管Main()函数没有返回值,但下面这条语句可以向父进程返回执行结果
    Environment.ExitCode = result;
  }
  }

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

  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#的多线程机制探索5

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

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

    下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可.线程入口使程序知道该让这个线程干什么事,在C#中,线程入口是通过ThreadStart代理(delegate)来提供的 ...

  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. 从原理来看Silverlight 4的架构
  2. 数制系统之间的转换总结(各进制的转换)
  3. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
  4. ABAP类的继承、多态、重载
  5. BackTrack5 安装中文输入法
  6. ThinkPHP3验证码、文件上传、缩略图、分页(自定义工具类、session和cookie)
  7. 实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集
  8. leetcode(189) 旋转数组
  9. c语言画爱心附带解释,用C语言画一个“爱心”
  10. iOS模型输出和打印
  11. Discuz X1.5 X2.5 X3 UC_KEY Getshell Write PHPCODE into config/config_ucenter.php Via /api/uc.php Vul
  12. Linux操作系统下软件的安装与卸载
  13. unity灯光Lightmapping、LightProbes
  14. 帆软高级函数应用之时间函数
  15. C语言判断素数的三种方法 判断素数(质数)
  16. 浅谈MES系统质量管理功能模块
  17. vue 前端 增加取色器/拾色器
  18. 玻璃材料封接工艺技术介绍-电连接器封装形式
  19. 前端上传图片添加水印
  20. el-select数据回显

热门文章

  1. 信息学奥赛一本通 1033:计算线段长度 | OpenJudge NOI 1.3 16
  2. Maximum sum(信息学奥赛一本通-T1305)
  3. 理论基础 —— 排序 —— 直接选择排序
  4. 信息学奥赛C++语言:求和4
  5. 信息学奥赛C++语言:For循环输出
  6. 8 CO配置-控制-一般控制-定义 CO 版本的分类账
  7. rbac权限管理5张表_Laravel5实现RBAC权限管理
  8. 302状态码_HTTP状态码status code详解
  9. linux内核那些事之mmap_region流程梳理
  10. Python getattr() 函数==>获取一个对象的属性值