为了快速处理大量的任务,多线程编程必不可少,所以最近也开始研究多线程方面的东西了。网上有不少资料可以参考,自己从实例入手,总结了一些东西,把它记录下来,方便自己日后查阅,也方便后来人。现在的编程语言,入门第一课,都是写一个Hello Word的程序。本文类似,虽说不是hello Word,但也是从最简单的多线程实例入手。

我们最常用到多线程的场景一般是这样的,有一个很大的任务需要处理,而这个大的任务有可以细分为许多的小任务(子任务),这些小任务可以采用多线程机制,并行执行。而一般来说,这个大任务所包含的小任务的个数可能不是太确定。

根据以上场景,我们对其进行归纳:

1. 一个大任务,内部包含了数量不定的子任务

2. 需要对子任务进行多线程处理

OK, 下面我们开始着手用C#实现对此实例的多线程实现。我的解决方案是:

1. 对象化大任务,在初始化大任务的实例(Instance)时,初始化(确定)子任务

2. 采用多线程,调用(Invoke)大任务的实例(Instance)中定义的处理子任务的方法

3. 多线程处理子任务时,定义一个全局的标志,记录但前处理到了哪一个,保证不重复处理子任务;

基于此方案,我们的“大任务”类如下:

外部多线程实现如下:

在Console模式下,其结果显示如下:

由此可见,线程3、4、5、6共4个线程一起处理了这些子任务。代码不是很复杂,只做简单说明:

1. 默认的命名空间为System.Threading, 线程相关的东西都在这个namespace下;

2. new Random((int)DateTime.Now.Ticks).Next(30, 50):初始化一个随机数的实例(instance),然后生产一个在30到50之间的随机数。这里的目的是假设我们在初始化任务实例时,不确定子任务的个数。后面还有new Random((int)DateTime.Now.Ticks).Next(100, 300),目的是架设处理子任务的时间在100到300毫秒之间不定

3. Thread th = new Thread(new ThreadStart(tester.TestOutput)); 
th.Start(); 这两句可是线程编程的核心,即初始化一个线程实例,然后开始执行!

4. Thread.CurrentThread.GetHashCode():这个可以返回线程的一个哈希值(HashCode),此例中没有实际意义,只用于区分不同的线程

5. private int flag = 0:作为一个标记使用,记录但前执行到那个子任务了。各个子线程均能够访问到。

6. public int MaxOutPut:记录总的任务数。

Console.Write(“Hello Word”) J 一个简单的多线程实例就是这么easy,当然,这只是最简单、最初步的一个实例,还有很多需要注意、优化的东西,也有一些bug,我们下文接着说。

本文转自Jack Niu博客园博客,原文链接:http://www.cnblogs.com/skywind/archive/2008/10/30/1322667.html,如需转载请自行联系原作者

多线程编程实战(一)相关推荐

  1. 《C#多线程编程实战(原书第2版)》——第3章 使用线程池 3.1 简介

    本节书摘来自华章出版社<C#多线程编程实战(原书第2版)>一书中的第3章,第3.1节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问 ...

  2. Java多线程编程实战指南

    内容简介 随着CPU 多核时代的到来,多线程编程在充分利用计算资源.提高软件服务质量方面扮演了越来越重要的角色.而解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案.然而,多线程编 ...

  3. Java多线程编程实战指南+设计模式篇pdf

    下载地址:网盘下载 随着CPU 多核时代的到来,多线程编程在充分利用计算资源.提高软件服务质量方面扮演了越来越重要的角色.而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案.然 ...

  4. java多线程编程_Java多线程编程实战指南+设计模式篇.pdf

    Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...

  5. 《C#多线程编程实战(原书第2版)》——3.2 在线程池中调用委托

    本节书摘来自华章出版社<C#多线程编程实战(原书第2版)>一书中的第3章,第3.2节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问 ...

  6. 《C#多线程编程实战(原书第2版)》——3.6 在线程池中使用等待事件处理器及超时...

    本节书摘来自华章出版社<C#多线程编程实战(原书第2版)>一书中的第3章,第3.6节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问 ...

  7. C#多线程编程实战(二)

    1.1 简介 为了防止一个应用程序控制CPU而导致其他应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力.此外操 ...

  8. 《C#多线程编程实战》读书笔记

    本文是一篇读书笔记,由<C#多线程编程实战>一书中的内容整理而来,主要梳理了.NET中多线程编程相关的知识脉络,从Thread.ThreadPool.Task.async/await.并发 ...

  9. 深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景)

    深入浅出多线程编程实战(五)ThreadLocal详解(介绍.使用.原理.应用场景) 文章目录 一.ThreadLocal简介 二.ThreadLocal与Synchronized区别 三.Threa ...

  10. Java多线程编程实战:模拟大量数据同步

    背景 最近对于 Java 多线程做了一段时间的学习,笔者一直认为,学习东西就是要应用到实际的业务需求中的.否则要么无法深入理解,要么硬生生地套用技术只是达到炫技的效果. 不过笔者仍旧认为自己对于多线程 ...

最新文章

  1. html实现圆圈逐渐放大,CSS3 简单的圆形放大旋转变换
  2. 【HIMI转载推荐之三】基于Cocos2dx引擎UI扩展引擎包[cocos2d-x-3c]
  3. el-table-column中格式化判断数据为空则显示指定内容
  4. LSTM implementation explained
  5. Git管理工具对比(GitBash、EGit、SourceTree)(转载)
  6. 六、表达式:前缀后缀
  7. 【2019浙江省赛 - A】Vertices in the Pocket(权值线段树下二分,图,思维)
  8. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结
  9. 收藏 | 理解卷积神经网络中的自注意力机制
  10. java复制arraylist_Java - 复制ArrayList
  11. soapUI简介、安装使用教程、接口(性能)测试
  12. 深度 ghost xp3 装IIS 方法
  13. 小米笔试题 风口的猪-中国牛市
  14. hadoop 起动是的时候报错 localhost: Could not create the Java virtual machine._far beyond me,thks~~_百度空间...
  15. python爬虫学习
  16. todesk无法连接网络
  17. 计算机基础知识学习第七课,7、新建文件夹--电脑基础知识
  18. 九大微博传播分析工具
  19. 推荐一款好用的GIF录屏软件(ScreenToGif)
  20. @Autowired报空指针NullPoint

热门文章

  1. 编程题:两个数比较大小,之后用变量t互换。
  2. Digg 让 八 动起来,让 八 产生价值
  3. KubeEdge向左,K3S向右
  4. mysql 开发进阶篇系列 10 锁问题 (使用“索引或间隙锁”的锁冲突)
  5. 浏览器允许跨域设置(不用于生产环境,开发用)
  6. Learn Python 011: while loop
  7. Facebook新推出AL语言,意在简化程序静态分析
  8. vue2.0 配置 选项 属性 方法 事件 ——速查
  9. fitnesse页面增加认证
  10. 通过 Jersey Http请求头,Http响应头,客户端 API 调用 REST 风格的 Web 服务