异步多线程(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();

                    });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值