zoukankan      html  css  js  c++  java
  • 『C#基础』多线程笔记「四」线程池

    现在到了关于多线最简单使用的最后一篇笔记。

    无论从什么角度来看,每一项事物都应该有其所在的空间,而对于线程来说,线程池就是它所存在的空间,或者叫容器了。

    关于线程池理论上的讲解,我找了几个大牛的文章链接,想要深入学习的可以去看下~

    1. http://www.cnblogs.com/jeffreyzhao/archive/2009/07/22/thread-pool-1-the-goal-and-the-clr-thread-pool.html
    2. http://www.cnblogs.com/JeffreyZhao/archive/2009/07/24/thread-pool-2-dedicate-pool-and-io-pool.html
    3. http://www.cnblogs.com/jeffreyzhao/archive/2009/10/20/thread-pool-3-lab.html
    4. http://kb.cnblogs.com/page/42531/

    接下来,看看这个线程池是如何使用的吧!

    概念:

    1. ManualResetEvent,通知一个或多个正在等待的线程已发生事件
    2. ManualResetEvent.Set(),将事件状态设置为终止状态,允许一个或多个等待线程继续
    3. ThreadPool.QueueUserWorkItem(…),将方法排入队列以便执行,并指定包含所用数据的对象。
    4. WaitHandle.WaitAll(…),等待指定数组中的所有元素都收到信号

    说明:

    如果只是从代码的使用上看,将一个方法加入线程池,只需要一行ThreadPool.QueueUserWorkItem(<方法名>),再加上一个ManualResetEvent对象,并不要忘记在方法执行完毕后,Set一下,这个就可以了。

    而对于更深一个层次的使用,就需要对CLR的远行机制以及对个人所要应用的项目特性进行了解、深入了。但是这明显不符合这篇笔记的主要目的,所以也就没必要去深究它了。

    如果想要更深入的了解,就去看上面已经给出的几个大牛的文章吧~

    代码:

    「官方示例」
    「我的最简代码」

    「我的最简代码」WorkerClass


    成果:

    image

  • 相关阅读:
    【剑指Offer-分解让复杂问题简单化】面试题38:字符串的排列
    【剑指Offer-分解让复杂问题简单化】面试题37:序列化二叉树
    【剑指Offer-分解让复杂问题简单化】面试题35:复杂链表的复制
    【剑指Offer-举例让抽象问题具体化】面试题34:二叉树中和为某一值的路径
    Git操作时遇到的一些问题和相应的处理方式
    Git分支规范说明
    敏捷的原则和价值观
    MongoDB批量更新和批量插入的方式
    请求地址中含有特殊字符#时如何有效处理
    IntelliJ IDEA Ultimate 6.2 版本免费试用期过期后如何破解
  • 原文地址:https://www.cnblogs.com/sitemanager/p/2424950.html
Copyright © 2011-2022 走看看