首页 > 代码库 > 多线程

多线程

一个进程至少有一个线程;同一个进程中的多个线程之间可以"并发"执行!

 1         /// <summary> 2         /// 非多线程方法 3         /// </summary> 4         /// <param name="sender"></param> 5         /// <param name="e"></param> 6         private void btnCount_Click(object sender, EventArgs e) 7         { 8             Count(); 9         }10 11         public static void Count()12         {13             //去的计算前的时间14             DateTime beginTime = DateTime.Now;15             for (int i = 0; i < 999999999; i++) { }16 17             //去的计算后的时间18             DateTime endTime = DateTime.Now;19 20             //耗时 用Subtract方法,返回值类型为TimeSpan21             TimeSpan time = endTime.Subtract(beginTime);22             MessageBox.Show("计算完毕,耗时:"+time.TotalMilliseconds.ToString());//转化为毫秒形式23         }

 

线程肯定也是要执行一段代码的。所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来做一件事情)

线程启动时,通过委托调用该方法------------ (线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法)。

产生一个线程的4步骤:

  1. 编写产生线程所要执行的方法-----Count()
  2. 引用System.Threading命名空间----------using System.Threading;
  3. 实例化Thread类,并传入一个指向线程所要运行方法的委托。(这时候这个线程已经产生,但是还没有运行)
  4. 调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定。
 1         public static void Count() 2         { 3             //去的计算前的时间 4             DateTime beginTime = DateTime.Now; 5             for (int i = 0; i < 999999999; i++) { } 6  7             //去的计算后的时间 8             DateTime endTime = DateTime.Now; 9 10             //耗时 用Subtract方法,返回值类型为TimeSpan11             TimeSpan time = endTime.Subtract(beginTime);12             MessageBox.Show("计算完毕,耗时:"+time.TotalMilliseconds.ToString());//将时间转化为毫秒表达形式13         }14 15         /// <summary>16         /// 多线程方法17         /// </summary>18         /// <param name="sender"></param>19         /// <param name="e"></param>20         private void btnCount2_Click(object sender, EventArgs e)21         {22             //引入命名空间using System.Threading;23             //ThreadStart是一个delegate委托,指向方法Count()24             Thread thread = new Thread(new ThreadStart(Count));25 26             //调用Thread实例的Start方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定。27             thread.Start();28         }

 

 Thread类的一些重要成员(*)

  1. Start()启动线程
  2. Abort()终止线程
  3. Sleep() 静态方法,可以使当前线程停止一段时间运行
  4. Name线程名
  5. Thread.CurrentThread获得当前的线程引用