zoukankan      html  css  js  c++  java
  • C# -- 使用线程池 ThreadPool 执行多线程任务

    1. 使用线程池

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             WaitCallback wc1 = s =>{
     6                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
     7                 Stopwatch stw = new Stopwatch();
     8                 stw.Start();
     9                 long result = SumNumbers(10000000);
    10                 stw.Stop();
    11                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},",Thread.CurrentThread.ManagedThreadId,result,stw.ElapsedMilliseconds);
    12             };
    13             WaitCallback wc2 = s => {
    14                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
    15                 Stopwatch stw = new Stopwatch();
    16                 stw.Start();
    17                 long result = SumNumbers(10000000);
    18                 stw.Stop();
    19                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
    20             };
    21             WaitCallback wc3 = s => {
    22                 Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
    23                 Stopwatch stw = new Stopwatch();
    24                 stw.Start();
    25                 long result = SumNumbers(10000000);
    26                 stw.Stop();
    27                 Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
    28             };
    29 
    30             
    31             ThreadPool.QueueUserWorkItem(wc1);
    32             ThreadPool.QueueUserWorkItem(wc2);
    33             ThreadPool.QueueUserWorkItem(wc3);
    34 
    35             Console.ReadKey();
    36         }
    37 
    38         static long SumNumbers(int count)
    39         {
    40             long sum = 0;
    41             for (int i = 0; i < count; i++)
    42             {
    43                 sum += i;
    44             }
    45             Thread.Sleep(1000);
    46             return sum;
    47         }
    48     }

    执行结果:

    2. 等待线程池的线程执行

     1 class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             using (ManualResetEvent m1 = new ManualResetEvent(false))
     6             using (ManualResetEvent m2 = new ManualResetEvent(false))
     7             using (ManualResetEvent m3 = new ManualResetEvent(false))
     8             {
     9                 ThreadPool.QueueUserWorkItem(
    10                     s =>{
    11                         Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
    12                         Stopwatch stw = new Stopwatch();
    13                         stw.Start();
    14                         long result = SumNumbers(10000000);
    15                         stw.Stop();
    16                         m1.Set();
    17                         Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
    18                     });
    19 
    20                 ThreadPool.QueueUserWorkItem(
    21                     s =>{
    22                         Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
    23                         Stopwatch stw = new Stopwatch();
    24                         stw.Start();
    25                         long result = SumNumbers(10000000);
    26                         stw.Stop();
    27                         m2.Set();
    28                         Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
    29                     });
    30                 ThreadPool.QueueUserWorkItem(
    31                     s =>{
    32                         Console.WriteLine("线程ID:{0},开始执行", Thread.CurrentThread.ManagedThreadId);
    33                         Stopwatch stw = new Stopwatch();
    34                         stw.Start();
    35                         long result = SumNumbers(10000000);
    36                         stw.Stop();
    37                         m3.Set();
    38                         Console.WriteLine("线程ID:{0},执行完成,执行结果:{1},执行用时{2},", Thread.CurrentThread.ManagedThreadId, result, stw.ElapsedMilliseconds);
    39                     });
    40 
    41                 //等待线程池的线程执行
    42                 m1.WaitOne();
    43                 m2.WaitOne();
    44                 m3.WaitOne();
    45                 Console.WriteLine("所有线程执行完成");
    46 
    47             }
    48 
    49             Console.ReadKey();
    50         }
    51 
    52         static long SumNumbers(int count)
    53         {
    54             long sum = 0;
    55             for (int i = 0; i < count; i++)
    56             {
    57                 sum += i;
    58             }
    59             Thread.Sleep(3000);
    60             return sum;
    61         }
    62     }

    执行结果:

  • 相关阅读:
    Maven的安装与配置(eclipse,idea)
    用java代码打印九九乘法表
    HDFS的Java客户端操作代码(HDFS删除文件或目录)
    Java代码操作HDFS(在/user/root/下面創建目錄)
    第二种方式读取并显示HDFS中的内容
    HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)
    HDFS的Java客户端操作代码(HDFS的查看、创建)
    CentOs6.8安装Git并安装oh my zsh
    搭建maven开发环境测试Hadoop组件HDFS文件系统的一些命令
    R-大数据分析挖掘(5-R基础回顾)
  • 原文地址:https://www.cnblogs.com/kliine/p/10168315.html
Copyright © 2011-2022 走看看