注意:如果电脑是单核单线程的,这么做是没有意义的。

这里直接贴一下主要代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Data;
  6.  
  7. namespace ThreadTest
  8. {
  9. class Moultithreading
  10. {
  11. //创建2个线程
  12. Thread ThreadOne = new Thread(new ThreadStart(ThreadOne1));
  13. Thread ThreadTwo = new Thread(new ThreadStart(ThreadTwo2));
  14. //ListInfo用于存放待执行的任务,ListInfo2用于存放已经执行过的任务(做一个标记的作用)
  15. static List<string> ListInfo = new List<string>();
  16. static List<string> ListInfo2 = new List<string>();
  17. public Moultithreading()
  18. {
  19. //假定有20个待执行任务
  20. for (int i = ; i < ; i++)
  21. {
  22. ListInfo.Add(i + "");
  23. }
  24. ThreadOne.Start();
  25. ThreadTwo.Start();
  26. }
  27. /// <summary>
  28. /// 线程1执行逻辑
  29. /// </summary>
  30. private static void ThreadOne1()
  31. {
  32. ThreadExecute("One");
  33. }
  34. /// <summary>
  35. /// 线程2执行逻辑,与线程1相同
  36. /// </summary>
  37. private static void ThreadTwo2()
  38. {
  39. ThreadExecute("Two");
  40. }
  41. /// <summary>
  42. /// 线程执行任务的通用方法,这里因为2个线程执行逻辑相同,就写到一起了。用一个参数加以区分
  43. /// </summary>
  44. /// <param name="ThreadNum"></param>
  45. private static void ThreadExecute(string ThreadNum)
  46. {
  47. for (int i = ; i < ListInfo.Count; i++)
  48. {
  49. try
  50. {
  51. //当前任务未执行过,且未被其他线程占用
  52. if (!ListInfo2.Contains(ListInfo[i]) && Monitor.TryEnter(ListInfo[i], ))
  53. {
  54. Console.WriteLine("线程" + ThreadNum + "执行了任务:" + ListInfo[i]);//执行任务
  55. ListInfo2.Add(ListInfo[i]);//任务执行完添加标记
  56. Thread.Sleep();
  57. }
  58. }
  59. finally
  60. {
  61. if (Monitor.TryEnter(ListInfo[i]))
  62. {
  63. Monitor.Exit(ListInfo[i]);//释放锁
  64. }
  65. }
  66. }
  67. }
  68. }
  69. }
    执行结果:

C#多个线程同时执行一个任务示例的更多相关文章

  1. 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

    [源码下载] 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 作者:webabcd 介绍重新想象 Wi ...

  2. CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  3. 既然CPU一次只能执行一个线程,那多线程存在的意义是什么?

    今天看到了一篇文章,终于解除了一直的疑惑.         原文链接:https://www.cnblogs.com/qingbafengliuxia/p/10171638.html CPU的时间是按 ...

  4. 既然CPU同一时间只能执行一个线程,为什么存在并发问题

    一点小疑惑终于解开啦 1.CPU的时间是按时间片分的,而不是一个时间点,并发问题是由于CPU线程切换导致的. 现在假设有一段代码 if(i == 1) { i++; //断点1 system.out. ...

  5. 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。

    Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ...

  6. JAVA多线程之当一个线程在执行死循环时会影响另外一个线程吗?

    一,问题描述 假设有两个线程在并发运行,一个线程执行的代码中含有一个死循环如:while(true)....当该线程在执行while(true)中代码时,另一个线程会有机会执行吗? 二,示例代码(代码 ...

  7. Qt中暂停线程的执行(主线程和工作线程共用一把锁,一旦主线程将它锁上,工作线程就无法运行了,这也是一个办法)

    在线程中定义一个信号量: QMutex pause; 把run()函数中循环执行的部分用信号量pause锁住:   void run()   {   while(1)   {   pause.lock ...

  8. java中怎么终止一个线程的执行----个人学习心得

    参考了一下两个网站的介绍: ①:http://blog.csdn.net/liuhanhan512/article/details/7077601 ②:http://www.blogjava.net/ ...

  9. Qt中暂停线程的执行

    在线程中定义一个信号量 QMutex pause; 把run()函数中循环执行的部分用信号量pause锁住: void run() { while(1) { pause.lock(); //循环执行的 ...

随机推荐

  1. (转)CentOS 7 安装 Docker

    原文:http://www.cnblogs.com/stulzq/p/7743073.html http://www.cnblogs.com/stulzq/p/8629165.html-------- ...

  2. 微服务Kong(七)——CLI参考

    KONG提供了一套CLI(命令行界面)命令,您可以通过它来启动.停止和管理您的Kong实例.CLI管理您的本地节点(如在当前机器上). 全局配置 所有命令都采用一组指定的可选标志作为参数: --hel ...

  3. 第8章 scrapy进阶开发(1)

    8-1 selenium动态网页请求与模拟登录知乎 Ⅰ.介绍selenium 1.什么是selenium:selenium百度百科 2.selenium的构架图: 如果要操作浏览器,还需要一个driv ...

  4. [转] .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要转载 一来是最近面试了几家公司,发现问的还都是这些的基础知识,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果. 为什么有人说,不动笔不读书.我现在也是深有体会了,看过的东西不一定会记得 ...

  5. JavaScript内置对象与原生对象【转】

    原文:https://segmentfault.com/a/1190000002634958 内置对象与原生对象 内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化 ...

  6. java一些对象概念扫盲帖(DO VO DTO PO)

    资料来源:http://virusswb.blog.51cto.com/115214/458636 BO:Business Object,业务对象.主要是承载业务数据的实体.处理业务逻辑的时候使用,数 ...

  7. IO流实现模拟软件试用的功能

    import java.io.*; public class TryOut { /** * IO流模拟软件试用次数的功能 * 这里注意try里BufferedOutputStream不要和InputS ...

  8. Spring学习笔记:spring整合web之spring-web架包的引用(WebApplicationContextUtils注入容器)

    WebApplicationContextUtils 一.Spring整合web之前 案例:给部门列表添加新部门 import org.apache.log4j.Logger; import org. ...

  9. springMVC 静态资源加版本号

    springMVC 静态资源加版本号 http://blog.csdn.net/zhangt85/article/details/42126275

  10. 【SSH网上商城项目实战09】添加和更新商品类别功能的实现

    转自:https://blog.csdn.net/eson_15/article/details/51347734 上一节我们做完了查询和删除商品的功能,这一节我们做一下添加和更新商品的功能. 1.  ...