博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET多线程编程(13)——一个简单的C#多线程间同步的例子
阅读量:6983 次
发布时间:2019-06-27

本文共 1896 字,大约阅读时间需要 6 分钟。

  在开发中经常会遇到线程例子如果某个后台操作比较费时间我们就可以启动个线程去执行那个费时操作同时继续执行在某些情况下可能会出现多个线程同步协同问题下面例子就展示了在两个线程的间如何协同工作

  这个思路是共同做件事情(从个ArrayList中删除元素),如果执行完成了两个线程都停止执行

  代码如下:

using;

using.Collections;

using.Collections.Generic;

using.Threading;

///<summary>

///在开发中经常会遇到线程例子如果某个后台操作比较费时间我们就可以启动个线程去执行那个费时操作同时继续执行在某些情况下可能会出现多个线程同步协同问题下面例子就展示了在两个线程的间如何协同工作

///

///这个思路是共同做件事情(从个ArrayList中删除元素),如果执行完成了两个线程都停止执行

///作者:周公

///时间:2008-5-17

///原发地址:http://blog.csdn.net/zhoufoxcn

///</summary>

publicThreadDemo

{

  privateThreadthreadOne;

  privateThreadthreadTwo;

  privateArrayListList;

  privateeventEventHandlerOnNumberClear;//数据删除完成引发事件

  publicvoidMain

  {

    ThreadDemodemo=ThreadDemo(1000);

    demo.Action;

  }

  publicThreadDemo(number)

  {

    Randomrandom=Random(1000000);

    List=ArrayList(number);

    for(i=0;i<number;i)

    {

      List.Add(random.Next.);

    }

    threadOne=Thread(ThreadStart(Run));//两个线程共同做件事情

    threadTwo=Thread(ThreadStart(Run));//两个线程共同做件事情

    threadOne.Name="线程1";

    threadTwo.Name="线程2";

    OnNumberClearEventHandler(ThreadDemo_OnNumberClear);

  }

  ///<summary>

  ///开始工作

  ///</summary>

  publicvoidAction

  {

    threadOne.Start;

    threadTwo.Start;

  }

  ///<summary>

  ///共同做工作

  ///</summary>

  privatevoidRun

  {

    Value=null;

    while(true)

    {

      Monitor.Enter(this);//锁定保持同步

      Value=()List[0];

      Console.WriteLine(Thread.CurrentThread.Name+"删除了"+Value);

      List.RemoveAt(0);//删除ArrayList中元素

      (List.Count0)

      {

        OnNumberClear(this,EventArgs);//引发完成事件

      }

      Monitor.Exit(this);//取消锁定

      Thread.Sleep(5);

    }

  }

  //执行完成的后停止所有线程

  voidThreadDemo_OnNumberClear(objectsender,EventArgse)

  {

    Console.WriteLine("执行完了停止了所有线程执行");

    threadTwo.Abort;

    threadOne.Abort;

  }

}

  介绍说明:要实现线程同步不止这种方式在这里采用了事件在事件处理里中止了线程(主要是回答csdn论坛个朋友问题才用了这种办法)
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/203214,如需转载请自行联系原作者
你可能感兴趣的文章
云架构的基础转变会带来哪些变化?
查看>>
如何将视频下载并且转码拼接
查看>>
Alcatraz插件安装问题
查看>>
轻松了解“Web应用防火墙”
查看>>
Kubernetes基础文档(链接,下载,安装,架构)
查看>>
PEEK材料再获突破,对3D打印产业影响几何
查看>>
无线加速度传感器
查看>>
设计模式
查看>>
Zend Studio 0x80070666错误解决
查看>>
Mac应用程序无法打开或文件损坏的处理方法
查看>>
网址被微信拦截怎么办 微信屏蔽的域名如何正常访问
查看>>
@ModelAttribute运用详解
查看>>
思科交换机VTP配置
查看>>
正则表达式
查看>>
Mysql中使用命令行导入.sql文件新建数据库表(图文)
查看>>
RUBY有感
查看>>
spring 配置多数据源
查看>>
Java 线程数据交换控制器Exchange使用实例
查看>>
IBM X系列服务器IMM日志采集
查看>>
实验三 静态路由、默认路由配置
查看>>