黑马程序员技术交流社区

标题: 关于多线程问题 [打印本页]

作者: 韩温华    时间: 2012-11-22 22:16
标题: 关于多线程问题
多线程有几种方法,分别是什么,举例说明
作者: 陈辉    时间: 2012-11-22 23:15
1、先看例子吧
        程序一:
          public sealed class Program
          {
                public static void Main()
                {
                       //创建线程对象,传入要线程执行的方法                      Thread threadFirst = new Thread(CountTime);
                       //将线程设置为后台线程(当所有前台线程结束后,后台线程也会自动退出)
                       threadFirst.IsBackground = true;
                        //启动线程,执行方法
                       threadFirst.Start();
                }

                public void CountTime()               {
                    for (int i = 0; i <100; i++)
                   {
                          Console.WriteLine(i);
                   }

               }
          }

      程序二、
          public sealed class Program
          {
                public static void Main()
                {
                       //创建线程对象,传入要线程执行的方法                      Thread threadFirst = new Thread(CountTime);
                       //将线程设置为后台线程(当所有前台线程结束后,后台线程也会自动退出)
                       threadFirst.IsBackground = true;
                        //启动线程,执行方法
                       threadFirst.Start(max);
                }

                public void CountTime(int max)               {
                    for (int i = 0; i <max; i++)
                   {
                          Console.WriteLine(i);
                   }

               }
          }

2、总结:线程是通过委托来实现的,在创建Thread对象时,传递要执行的方法的方法名,Thread threadFirst = new Thread(CountTime)
                然后通过Start方法执行委托。如果所执行的方法带有参数,那么就在调用Start的方法时传递参数,如上述程序二 所示 ;
                如果不带参数,那么就在调用Start方法时不传参数,如上述程序一所示 ;如果要传递多个参数时,就将这多个参数放到一个集合中,
                再将这个集合传递给Start方法
a、不带参数:如上述程序一所示
b、带有参数:如上述程序二所示

作者: 韩俊    时间: 2012-11-23 10:09
在C#中,多线程是使用System.Threading命名空间在程序中实现的。该命名空间提供多个类、枚举、委托和接口来支持多线程。
ThreadStart是System.Threading命名空间内的一个委托;
ThreadPriority和ThreadState是System.Threading命名空间内的枚举;
Thread是System.Threading命名空间内的一个类;
ThreadAbortException和ThreadStateException是System.Threading命名空间内的异常类。


例子:
using System;
using System.Threading;

namespace Example_1
{
  class  SchedulingDemo
   {
     [STAThread]
     static void Main()
      {
          Thread.CurrentThread.Name="主线程";
          Thread objThreadOne=new Thread(new ThreadStart(TaskOne);
          objThreadOne.Name=" 子线程1";
          Thread objThreadTwo=new Thread(new ThreadStart(TaskTwo);
          objThreadTwo.Name="子线程2";

          //将开始子线程
          objThreadOne.Strat();
          objThreadTwo.Start();
          objThreadTwo.priority=Threadpriority.Highest;



       }
      
       static void  TaskOne()
       {
          for(int  count=1;count<=5;count++)
           {
              Console.WriteLine(count*2);
           }
       }
      
      
      static void  TaskTwo()
       {
          for(int  index=5000;index>=4990;index--)        
           {
              Console.WriteLine(index);
           }
       }
      

   }
}




作者: 韩温华    时间: 2012-11-23 12:40
陈辉 发表于 2012-11-22 23:15
1、先看例子吧
        程序一:
          public sealed class Program

嗯,讲得简单易懂,非常感谢
作者: 陈辉    时间: 2012-11-23 14:17
韩温华 发表于 2012-11-23 12:40
嗯,讲得简单易懂,非常感谢

大家互相学习吗,呵呵
作者: 陈辉    时间: 2012-11-23 14:21
韩温华 发表于 2012-11-23 12:40
嗯,讲得简单易懂,非常感谢

大家互相学习吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2