zoukankan      html  css  js  c++  java
  • 主线程等待子线程执行二

    如果要执行的内容很多,但允许开的最大线程数固定,比如20个。要等待所有线程执行完毕后才能继续,可以参考如下代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using CDBDataMultiSync.Model;
    using System.Threading;
    using System.Threading.Tasks;

    namespace CDBDataMultiSync.BLL
    {
        /// <summary>
        /// 导入数据管理
        /// </summary>
        public class ImportDataManager
        {

            public void MultiImportMessage(List<Message> messageLists)
           {
              //创建线程等待委托列表
               //List<WaitHandle> waitHandles = new List<WaitHandle>();
               ThreadPool.SetMaxThreads(20, 20);
               int waitThreadCount= 0; int MaxThreadCount= 0;
               for (int i = 0; i < messageLists.Count;i++ )
               {
                    //从线程池中获取一个线程来执行任务
                   ThreadPool.QueueUserWorkItem(new WaitCallback(CreateThreadDoTask), messageLists[i]);
               }         
               //等待所有线程执行完毕
               while(true)
               {
                 ThreadPool.GetAvailableThreads(out wth,out mth);
                   if(waitThreadCount-MaxThreadCount==0)
                   {
                       Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
                       Console.WriteLine("全部执行完毕");
                       break;
                   }
               }

           }

            public void CreateThreadDoTask(object msgObject)
            {
                  Message msg = (Message)msgObject;
                  ImportOneMessage(msg);
             }

            /// <summary>
            /// 多线程导入
            /// </summary>
            /// <param name="messageLists"></param>
            public void ImportOneMessage(Message msg)
            {
                Console.WriteLine("正在执行" + msg.BussinessName);

                int wth = 0; int mth = 0;
                ThreadPool.GetAvailableThreads(out wth, out mth);
                Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);

                Thread.Sleep(3000);
                Console.WriteLine("执行完毕=====" + msg.BussinessName);
                Console.WriteLine("空闲线程数{0},最大线程数{1}", wth, mth);
            }

        }
    }

  • 相关阅读:
    python基础——操作系统简介
    python 3 输入和输出
    C++学习笔记——C++简介
    ML机器学习导论学习笔记
    Linux常用基本指令——文件处理命令
    Oracle数据库从入门到精通-分组统计查询
    PL/SQL编程基础——PL/SQL简介
    django 第五课自定义模板过滤器与标签
    Python之GUI的最终选择(Tkinter)
    Python利用pandas处理Excel数据的应用
  • 原文地址:https://www.cnblogs.com/iampkm/p/2707063.html
Copyright © 2011-2022 走看看