黑马程序员-.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/