异步多线程(ThreadPool)

ThreadPool

1.什么是线程池

线程池是对Thread的一种封装,方便管理,是一种享元模式。

2.线程池的好处:

  1. 避免API乱用,降低复杂度
  2. 减少创建销毁的成本,限制最大线程数量

3.利用ThreadPool开启异步线程:

ThreadPool.QueueUserWorkItem(t => this.DoSomethingLong("btnThreadPool_Click"));

4.ThreadPool线程等待

利用ManualResetEvent信號量的WaitOne方法。當ManualResetEvent設置為false時,WaitOne等待;直到ManualResetEvent執行Set方法將ManualResetEvent設置為true,WaitOne通過;Reset方法將ManualResetEvent設置為false,WaitOne繼續等待。

ManualResetEvent mre = new ManualResetEvent(false);//信號量
                ThreadPool.QueueUserWorkItem(o =>
                {
                    Thread.Sleep(5000);
                    this.DoSomethingLong("btnThreads_Click");
                    Console.WriteLine(o.ToString());
                    mre.Set();
                }, "backbone");

                Console.WriteLine("before WaitOne");
                mre.WaitOne();
                Console.WriteLine("after WaitOne");

没有需求。就别等待 阻塞线程。

5.线程池设置:

ThreadPool.SetMaxThreads(8, 8);//设置线程池的最大辅助线程数目,以及IO线程数目
ThreadPool.SetMinThreads(8, 8); //设置线程池的最小辅助线程数目,以及IO线程数目

6.使用ThreadPool封装回调

  ThreadPool.QueueUserWorkItem(
                    o =>
                    {
                        Console.WriteLine("1234356786954");
                        new Action(() =>
                        {
                            Thread.Sleep(5000);
                            this.DoSomethingLong("btnThreads_Click");
                            //回调  包一层,放在这里
                        }).Invoke();

                    });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值