THREADSPOOL

  STPStartInfo stp = new STPStartInfo();//线程详细配置参数
            stp.CallToPostExecute = CallToPostExecute.Always;//在这里选择总是回调
            //当工作项执行完成后,是否释放工作项的参数,如果释放,参数对象必须实现IDisposable接口
            stp.DisposeOfStateObjects = true;
            //当线程池中没有工作项时,闲置的线程等待时间,超过这个时间后,会释放掉这个闲置的线程,默认为60秒
           // stp.IdleTimeout = 300;//300s
            //最大线程数,默认为25,
            //注意,由于windows的机制,所以一般最大线程最大设置成25,
            //如果设置成0的话,那么线程池将停止运行
            stp.MaxWorkerThreads = 50;//15 thread
            //只在STP执行Action<...>与Func<...>两种任务时有效
            //在执行工作项的过程中,是否把参数传递到WorkItem中去,用做IWorkItemResult接口取State时使用,
            //如果设置为false那么IWorkItemResult.State是取不到值的
            //如果设置为true可以取到传入参数的数组
            stp.FillStateWithArgs = true;

            //当工作项执行完毕后,默认的回调方法
            stp.PostExecuteWorkItemCallback = delegate(IWorkItemResult wir) { this.BeginInvoke(updateTxt, "-----------------ok" + wir.Result + "\r\n"); };
            //是否需要等待start方法后再执行工作项,?默认为true,当true状态时,STP必须执行Start方法,才会为线程分配工作项
            stp.StartSuspended = true;

            stp.AreThreadsBackground = true;

            m_hThreadPool = new SmartThreadPool(stp);//声明一个线程池

            foreach (int state in abc)
            {

                //IWorkItemResult<int> resultCallback = m_hThreadPool.QueueWorkItem(new Amib.Threading.Func<int, int>(IntDoSomeWork), state);
               //m_hThreadPool.QueueWorkItem( (obj) =>
               // {
               //     Thread.Sleep(3000);
               //     this.BeginInvoke(updateTxt, "正在执行" + state.ToString() + "\r\n");
               //     string str = "正在执行" + state.ToString() + "\r\n";
               //     return state * state;
               // }, state);
                //this.BeginInvoke(updateTxt, resultCallback.Result.ToString() + "\r\n");
            }
            m_hThreadPool.Start();
            m_hThreadPool.WaitForIdle();//等待该实例下的所有结果返回
            //MessageBox.Show(resultCallback.Result.ToString());
            m_hThreadPool.Shutdown();
时间: 2024-10-11 22:09:30

THREADSPOOL的相关文章

Java集合及concurrent并发包总结

1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对. Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持. List最常用的实现类有:ArrayList.LinkedList.Vector及Stack:Set接口常用的实现类有:HashSet.TreeSet. 1.1 ArrayList ArrayList基于

线程池使用

1.new Thread的弊端 a. 每次new Thread新建对象性能差. b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom.   c. 缺乏更多功能,如定时执行.定期执行.线程中断.相比new Thread,Java提供的四种线程池的好处在于:  a. 重用存在的线程,减少对象创建.消亡的开销,性能佳.  b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞.  c. 提供定时执行.定期执行.单线程.并发数控制

JAVA线程池的分析和使用

http://www.infoq.com/cn/articles/java-threadPool/ 1. 引言 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行.第三:提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控.但是要做到合理的利用线程池,必须对其原理了如指掌. 2. 线程池

Java线程池ThreadPoolExecutor

线程池的好处 1. 降低资源的消耗 通过重复利用已创建的线程降低线程创建和销毁所造成的消耗 2. 提高响应速度 当任务到达时,任务可以不需要等到线程创建就能立即执行 3. 提高线程的可管理型 线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配.调优和监控. 实现原理 当提交一个新任务到线程池时,线程池的处理流程为: 1). 线程池判断核心线程池里的线程是否都在执行任务. 如果不是,则创建一个新的工作线程来执行任务.如果核心线程池里的线程都在执行

线程小酌之理解线程池

一.引言 在学习JAVASE部分中,我们都学习到了基本的线程创建继承THREAD类或实现Runnable接口,在正常负载情况下,为每个任务分配一个线程这种方法能够提升串行执行的性能.只要请求的导弹速率不超出服务器的请求处理能力,那么这种方法可以同时带来更快的响应性和更高的吞吐率.但是在实际开发过程中,开发环境和测试环境因数据流量并没有达到实际请求流量,并不能发现实际的问题,在生产环境中,为每个任务分配一个线程这种方法存在一些缺陷,尤其是当需要创建大量的线程时: 1.线程的生命周期的开销非常高 线

java 多线程原理分析

一.为什么使用线程池 1.降低资源消耗,减少线程创建和销毁次数,每个工作线程可以重复利用,执行多个任务 2.可根据系统承受能力,调整工作线程的数目,防止消耗过多的内存 二.java 线程池使用 ExecutorService 真正的线程池接口. ScheduledExecutorService 能和Timer/TimerTask类似,解决那些需要任务重复执行的问题. ThreadPoolExecutor ExecutorService的默认实现. ScheduledThreadPoolExecu

Java编程思想之并发

1. 并发的多面性 更快的执行 改进代码设计 2. 基本的线程机制 线程的创建 ``` /* What will be run. */ private Runnable target; @Override public void run() { if (target != null) { target.run(); } } ``` (1) 实现Runnable接口:new Thread(Runnable).start(); 将任务与线程分离,符号面向对象思想,适合多个线程处理统一资源的情况. 可

2017/6/29杂记

ThreadPool用法与优势 合理利用线程池能够带来三个好处.第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗.第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行.第三:提高线程的可管理性.线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控.但是要做到合理的利用线程池,必须对其原理了如指掌. 我们可以通过ThreadPoolExecutor来创建一个线程池. new ThreadPo

Java集合及concurrent并发包总结(转)

1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对. Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持. List最常用的实现类有:ArrayList.LinkedList.Vector及Stack:Set接口常用的实现类有:HashSet.TreeSet. 1.1 ArrayList ArrayList基于