zoukankan      html  css  js  c++  java
  • C#多线程同步案例实操

    好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间。

    项目需求:

      实现一个简单的获取始发目的耗时、距离,将结果输出表格。

    方案思路:

      通过多线程方式调用http请求,将结果数据输出表格。

    关键点分析:

    1. 多线程线程池大小如何分配
    2. 如何确保所有线程执行完毕

    技术关键点:

    1. 多线程同步EventWaitHandle对象使用

    2. ManualResetEvent线程信号使用
    3. 线程对象Thread使用
    4. ParameterizedThreadStart线程参数使用
    5. WaitHandle管理多线程状态

    代码如下: 

     1 private static void CalcDistance()
     2         {
     3             int threadCount = 10;
     4             pageSize = sourceList.Count / threadCount + 1;
     5             destList = new List<SiteDistance>();
     6             var waits = new List<EventWaitHandle>();
     7             for (int i = 0; i < threadCount; i++)
     8             {
     9                 var handler = new ManualResetEvent(false);
    10                 waits.Add(handler);
    11                 new Thread(new ParameterizedThreadStart(calcDistance))
    12                 {
    13                     Name = "thread" + i.ToString()
    14                 }.Start(new Tuple<int, EventWaitHandle>(i, handler));
    15             }
    16             WaitHandle.WaitAll(waits.ToArray());
    17 
    18             expExcel();
    19             Console.WriteLine("输出完成——》共生成" + destList.Count + "条数据,耗时:" + DateTime.Now.Subtract(startTime).TotalSeconds);
    20             Console.ReadKey();
    21         }
  • 相关阅读:
    Hibernate 工作原理及为什么要用
    一款很好用的JQuery dtree树状图插件(一)
    android PopupWindow
    android 截屏工具类
    ubuntu 中文输入法
    Google GCM推送
    windows 安装配置 ant
    (转)Angular中的拦截器Interceptor
    flex 布局 自己做的demo
    flex布局 (转)
  • 原文地址:https://www.cnblogs.com/tuqun/p/10491316.html
Copyright © 2011-2022 走看看