黑马程序员-.net下多线程的实现

来源:互联网 发布:游戏 知乎 编辑:程序博客网 时间:2024/05/24 04:20

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
  在本质上和结构来说,.NET是一个多线程的环境。有两种主要的多线程方法是.NET所提倡的:使用ThreadStart来开始你自己的进程,直接的(使用ThreadPool.QueueUserWorkItem)或者间接的(比如Stream.BeginRead,或者调用BeginInvoke)使用ThreadPool类。一般来说,你可以"手动"为长时间运行的任务创建一个新的线程,另外对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。线程的基类是System.Threading。所有线程通过CLI来进行管理。

  ·创建线程:
  创建一个新的Thread对象的实例。Thread的构造函数接受一个参数
  Thread DummyThread = new Thread( new ThreadStart(dummyFunction) );
  ·执行线程:
  使用Threading命名空间里的start方法来运行线程:
  DummyThread.Start ();
  ·组合线程:
  经常会出现需要组合多个线程的情况,就是当某个线程需要其他线程的结束来完成自己的任务。假设DummyThread必须等待DummyPriorityThread来完成自己的任务,只需要这样做:
  DummyPriorityThread.Join() ;
  ·暂停线程:
  使得线程暂停给定的秒
  DummyPriorityThread.Sleep(<Time in Second>);
  ·中止线程:
  如果需要中止线程可以使用如下的代码:
  DummyPriorityThread.Abort();
  ·同步
  经常会遇到需要在线程间进行同步的情况,下面的代码给出了一些方法:
  using System;
  using System.Threading;
  namespace SynchronizationThreadsExample
  {
  class SynchronizationThreadsExample
  {
  private int counter = 0;
  static void Main( )
  {
  SynchronizationThreadsExample STE = new SynchronizationThreadsExample();
  STE.ThreadFunction( );
  }
  public void ThreadFunction ( )
  {
  Thread DummyThread = new Thread( new ThreadStart(SomeFunction)) ;
  DummyThread.IsBackground=true;
  DummyThread.Name = "First Thread";
  DummyThread.Start( );
  Console.WriteLine("Started thread ", DummyThread.Name);
  Thread DummyPriorityThread = new Thread( new ThreadStart(SomeFunction) );
  DummyPriorityThread.IsBackground=true;
  DummyPriorityThread.Name = "Second Thread";
  DummyPriorityThread.Start( );
  Console.WriteLine("Started thread ", DummyPriorityThread.Name);
  DummyThread.Join( );
  DummyPriorityThread.Join( );
  }
  public void SomeFunction( )
  {
  try
  {
  while (counter < 10)
  {
  int tempCounter = counter;
  tempCounter ++;
  Thread.Sleep(1);
  counter = tempCounter;
  Console.WriteLine( "Thread . SomeFunction: "+Thread.CurrentThread.Name+counter);
  }
  }
  catch (ThreadInterruptedException Ex)
  {
  Console.WriteLine( "Exception in thread "+Thread.CurrentThread.Name);
  }
  finally
  {
  Console.WriteLine( "Thread Exiting. "+Thread.CurrentThread.Name);
  }
  }
  }
  }
  ·使用Interlock
  C#提供了一个特殊的类叫做interlocked,就是提供了锁机制的实现,可以加入如下的代码实现锁机制:
  Interlocked.SomeFunction (ref counter);
  ·使用锁
  这是为了锁定代码关键区域以进行同步,锁定代码如下:
  lock (this){ Some statements ;}
  ·使用Monitor
  当有需要进行线程管理的时候可以使用:
  Monitor.Enter(this);
  其他也有一些方法进行管理,这里就不一一提及了。
  线程的缺点
  线程自然也有缺点,以下列出了一些:
  ·如果有大量的线程,会影响性能,因为操作系统需要在他们之间切换;
  ·更多的线程需要更多的内存空间
  ·线程会给程序带来更多的bug,因此要小心使用
  ·线程的中止需要考虑其对程序运行的影响

  ·通常块模型数据是在多个线程间共享的,需要一个合适的锁系统替换掉数据共享
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/

原创粉丝点击