C#多线程同步案例实操

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

项目需求:

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

方案思路:

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

关键点分析:

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

技术关键点:

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

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

代码如下: 

 private static void CalcDistance()
{
int threadCount = ;
pageSize = sourceList.Count / threadCount + ;
destList = new List<SiteDistance>();
var waits = new List<EventWaitHandle>();
for (int i = ; i < threadCount; i++)
{
var handler = new ManualResetEvent(false);
waits.Add(handler);
new Thread(new ParameterizedThreadStart(calcDistance))
{
Name = "thread" + i.ToString()
}.Start(new Tuple<int, EventWaitHandle>(i, handler));
}
WaitHandle.WaitAll(waits.ToArray()); expExcel();
Console.WriteLine("输出完成——》共生成" + destList.Count + "条数据,耗时:" + DateTime.Now.Subtract(startTime).TotalSeconds);
Console.ReadKey();
}
上一篇:[转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)


下一篇:【LCS,LIS】最长公共子序列、单调递增最长子序列