C#多线程(三)——ThreadPool的使用

1.  应用程序中的线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应,这种情况下需要使用ThreadPool

2.  ThreadPool可以作为一个线程的容器,ThreadPool类也是一个静态类,你不能也不必要生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是没有办法取消的。在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等等工作都是由系统自动完成的,你无须考虑那些复杂的细节问题。

3.  ThreadPool.QueueUserWorkItem(WaitCallbackObject )方法一个重载可以通过传递一个object对象给线程,这样我们在使用的时候就可以将一些重要信息封装后传递给线程。值得注意的是,传递给WaitCallback的参数的方法必须有一个Object的参数,不然会提示:ThreadRun”的重载均与委托“System.Threading.WaitCallback”不匹配。代码如下:

static void Main(string[] args)

        {

            //定义一个计数器

            Program p = new Program();

            WaitCallback wc = new WaitCallback(p.ThreadRun);

ThreadPool.QueueUserWorkItem(wc);

        }

        //定义一下线程执行的方法

        public void ThreadRun(Object o)

        {

            //具体处理

}

 

补充一点Interlocked.Increment(ref int)函数类似于将传入的int变量放在lock关键字范围内。代码如下:

lock (this)

            {

               //计数器

                count++;

            }

类似于代码:Interlocked.Increment(ref count),还有一个递减的方法Interlocked.Decrement(ref int)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值