`
king_c
  • 浏览: 225374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c#的ThreadPool使用笔记(一)

    博客分类:
  • c#
 
阅读更多

 

摘要:
系列文章,从一个基本的代码说起,逐步探索 ThreadPool 的奥妙。

首先,看看线程池的样子:

从上图看出,线程池维护1个至n个线程,操作系统从请求队列中提取请求分配个线程池中的适合线程处理。

 

 

using System;
using System.Threading;

public class ThreadBase
{
    public static void Main ( ) {

        System.Threading.WaitCallback waitCallback = new WaitCallback ( MyThreadWork );

        ThreadPool.QueueUserWorkItem ( waitCallback, "第一个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第二个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第三个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第四个线程" );
        Console.ReadLine ( );
    }

    public static void MyThreadWork ( object state ) {
        Console.WriteLine ( "线程现在开始启动…… {0}",(string)state );
        Thread.Sleep ( 10000 );
        Console.WriteLine ( "运行结束…… {0}",( string ) state );
    }
}

 分析上面的代码:
一、首先定义了一个 System.Threading.WaitCallback 对象 waitCallback。 
WaitCallback 是一个委托,表示线程池线程要执行的回调方法,它的原型如下:

[ComVisibleAttribute(true)] 
public delegate void WaitCallback (
    Object state
)
 1、这里有一个 Callback 机制的问题,所谓的Callback 简单的理解就是由操作系统调用的函数,我们自己写的程序不需要调用。就像有个修理工到家里搞修理,你只需要告诉他钳子、螺丝刀、胶布等修理工具在什么地方就行,而不要管他在什么时候、在什么地方怎样使用这些修理工具。

2、WaitCallback 的参数" Object state",这个参数包含回调方法要使用的信息的对象。在接下来的情况中我再说。
既然 WaitCallback 委托的原型如此,那么我们就申明一个跟它的样子差不多的函数,这个函数就是要线程做的事情。

public static  void MyThreadWork ( object state )
 这里函数中多了一个 "static",这是因为Main的关系(更大一点就是因为C#语言机制的问题),如果WaitCallback 的对象不是在静态(static)方法中,这个static 是不需要的。


二、接着就是要执行的方法放入线程池中,以便操作系统执行。
我这里放置了四个方法要操作系统执行:

        ThreadPool.QueueUserWorkItem ( waitCallback, "第一个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第二个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第三个线程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第四个线程" );
 这里,我放置到线程池中的操作是一样的,当然也可以不一样,接下来说。


三、最后阻塞主线程,等待线程池中的线程执行

Console.ReadLine ( );
 如果忽略掉这个代码,则有可能看不到任何输出


好了,这是主线程做的事情了,接下来看看线程池中的线程做的事情。
这个很简单,就是将线程的参数输出,然后线程睡眠(sleep)一段时间,最后输出线程结束的信息。

 

 

分享到:
评论

相关推荐

    c#的ThreadPool使用笔记.pdf

    在C#编程中,`ThreadPool`是一个非常重要的概念,它是.NET Framework中用于管理线程的内置服务。ThreadPool允许开发者创建线程而无需显式地创建和管理线程对象,从而提高系统效率和资源利用率。线程池会根据系统资源...

    C# 多线程笔记和示例讲解

    以下是对"C#多线程笔记"中可能包含的知识点的详细解释。 1. **线程基础**: - **什么是线程**:线程是程序执行的最小单元,每个进程至少有一个线程,负责执行程序代码。 - **主线程与子线程**:主线程是程序的...

    C#面试核心内容笔记

    7. **多线程**:了解Thread类和ThreadPool的使用,掌握线程同步机制(如Mutex、Semaphore、Monitor)以及异步编程模型(如Task、async/await)。 8. **泛型接口与抽象类**:理解Interface和Abstract Class的区别,...

    C#线程系列讲座笔记整理

    【C#线程系列讲座笔记整理】 一、线程基础 线程是操作系统中的基本执行单元,它在进程中运行,允许同一程序同时处理多个任务。在C#中,线程可以用于提高应用程序的并发性和响应性,特别是在多核处理器环境下。通过...

    c#多线程编程笔记

    本笔记将深入探讨C#中的多线程编程,包括其基本概念、创建线程的方式、线程同步与互斥、线程安全以及线程池的使用。 ### 1. 基本概念 - **线程**:线程是程序的执行流程,每个进程至少包含一个线程。多线程意味着...

    c#多线程编程笔记5(完结).pdf

    在本笔记中,我们将围绕C#多线程编程进行探讨,特别是使用`Interlocked`类进行线程同步以及`ReaderWriterLock`类来处理读写冲突的情况。 ### 使用`Interlocked`类进行线程同步 `Interlocked`类在.NET框架中提供了...

    C#进程和线程资料集锦

    在IT领域,尤其是在软件开发中,C#是一种广泛使用的编程语言,它支持多线程编程,使得程序可以同时执行多个任务。"C#进程和线程资料集锦"这一主题涵盖了进程与线程的基本概念、管理和同步技术,是C#开发者必备的知识...

    BookRecord C#

    《BookRecord C#》是一款基于C#编程语言开发的个人软件,主要功能是提供一个类似于阅读书籍的应用,但在此基础上增加了书籍相关信息的保存与管理。软件内置了数据库,用于存储用户的阅读记录和书籍资料,同时也整合...

    线程编程练习笔记

    本文将深入探讨C#中的线程类及其重要知识点,结合“线程编程练习笔记”的内容进行详细讲解。 一、线程基础 线程是操作系统分配CPU时间的基本单位,每个进程至少有一个主线程。在C#中,`System.Threading`命名空间...

    C#蜂巢工作机制系统与源代码.zip

    在IT行业中,C#是一种广泛使用的面向对象的编程语言,尤其在开发Windows应用程序、Web应用程序以及游戏开发等领域表现突出。本资源"**C#蜂巢工作机制系统与源代码.zip**"提供了一个基于C#实现的蜂巢工作系统,旨在...

    aspnet学习笔记[定义].pdf

    7. **多线程**:在`System.Threading`命名空间中,`Thread`类用于创建和管理线程,`ThreadPool`类用于线程池管理。`Thread.Start()`启动线程,`Thread.Sleep()`暂停当前线程,`Thread.Abort()`尝试终止线程,`Thread...

    线程笔记(多线程,异常)

    10. **线程池**:`ThreadPool`类提供了一种高效的线程复用方式,通过`QueueUserWorkItem()`方法可以将任务放入线程池,减少线程创建和销毁的开销。 理解并熟练运用这些线程和同步概念,是编写高效、安全的多线程...

    小米抢购软件 源码 学习使用

    3. **多线程/异步处理**:为了提高抢购效率,软件可能采用了多线程或异步编程模型,如C#中的Task或.NET Framework的ThreadPool。这样可以在等待网络响应的同时处理其他任务,减少整体耗时。 4. **定时器与事件驱动*...

Global site tag (gtag.js) - Google Analytics