深刻浅出多线程,你值得拥有

(原文转自Intel Software并做些许修改,原标题《黑马程序员--多线程原来是这么简单》)css

 

一直以来对于多线程有种恐惧恐惧感,不理解它究竟是什么回事,感受挺抽象的,自从听了传智播客的邹老师对于多线程的讲解,我能够很自信地说我多线程方面入门了,特别是邹老师对于多线程有一套独有的方法,那就是画图,经过画图能够很直观地告诉你多线程是什么回事,好比UI线程和主线程,前台线程和后台线程,经过案例的讲解让你发现多线程的美妙。如下简单从如何建立多线程开始。首先来看用单线程的缺点:html

经过对比单线程和多线程,建立了一个winform小程序来对比,界面以下:程序员

null
进入代码区:小程序

首先创建一个循环999999999次的方法:多线程

   1:  ///
   2:  ///
   3:  /// 循环计数的方法
   4:  ///
   5:   
   6:  void CountTime()
   7:  {
   8:      DateTime beginTime = DateTime.Now;
   9:      for (int i = 0; i <= 999999999; i++)
  10:      {
  11:   
  12:      }
  13:      TimeSpan ts = DateTime.Now.Subtract(beginTime);
  14:      MessageBox.Show("执行完毕!!" + ts.TotalMilliseconds);
  15:  }

回到界面单击“单线程的缺点”这个按钮,编写事件代码以下:spa

   1:  //单线程的缺点
   2:  private void btnSingleThread_Click(object sender, EventArgs e)
   3:  {
   4:      CountTime();
   5:  }

点击运行,因为不能演示看,你会看到你没法拖动这个窗口移动摇晃,好像界面卡死了同样,过了一下子,由于循环计数结束,弹出以下窗口:
null
线程

2)那么如何解决这种UI卡死的问题呢,由于以前单单用到单线程的而出现卡死的问题是由于界面运行的时候,其实主线程只能去处理计数,而根本没有时间去处理你偶外的“拖动摇晃”这个事件,之道计数这个事情作完以后才会过来作“拖动摇晃”的这个事件,为了解决这个“假死”的事情,就要用到多线程技术,点击界面的“多线程”按钮,以下代码:code

   1:  //使用多线程来解决UI卡死问题
   2:  private void btnMulTread_Click(object sender, EventArgs e)
   3:  {
   4:   
   5:      //建立线程对象 传入要线程执行的方法
   6:      Thread th = new Thread(CountTime);
   7:      //将线程设置为后台线程(当全部的前台线程结束后,后台线程会自动退出)
   8:      th.IsBackground = true;
   9:      //启动线程执行方法
  10:      th.Start();
  11:   
  12:  }

这样点击运行并点击“多线程”按钮来执行的话,你会发现运行过程当中你能够拖动窗口,很是流畅地拖动着走,直到运行结束弹出以下消息窗口:
null
orm

细心的你可能会发现上面两个执行时间不同,单线程用的时间比多线程用的少那么一点点,缘由是由于CPU要来回转过去执行UI线程和计数线程,其实多线程的实际上不是同时执行,只是由于CPU处理速度太快了,能够很是快速地来回在各个线程之间切换执行,就好像咱们先烧开水,而后不用去等开水开了就能够去洗衣服同样,由于CPU处理的速度太快了,咱们人裸眼根本察觉不到它在各个线程之间不停地切换,感受好像是同时运行同样。自从终于能够对多线程有一个入门的认识了。htm

 

 

Lionden 2013年11月3日

E-mail:hsdlionden@gmail.com

转载请注明原文地址和博客园Liondenhttp://www.cnblogs.com/lionden/

相关文章
相关标签/搜索