频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

详细讲解C#的多线程能力

来源: 作者: 出处:巧巧读书 2007-10-01 进入讨论组

   线程的使用    
   Java中存在许多编程人员希望能够对线程使用的标准操作:例如,测试线程是否存在、加入一个线程直到它死亡、杀死一个线程等。    
   表1:线程管理的函数    

   Java中java.lang.Thread中的方法和C#中System.Threading.Thread对象的对比。    
       
   setDaemon(   boolean   on)   方法    
   IsBackground   设置属性值    
   使一个存在的进程成为一个新线程(如果剩下的所有进程都成了新线程,程序将停止运行)。    
       
   isDaemon()方法    
   IsBackground   获取属性    
   如果该线程是一个后台线程,则返回真值。    
       
   isAlive()   方法    
   IsAlive   获取属性    
   如果该线程处于活动状态,则返回真值。    
       
   interrupt()   方法    
   Interrupt()   方法    
   尽管在Java中这一方法可以用来设置线程的中断状态,而且可以用来检查线程是否被中断。在C#中没有相应的方法,对一个没有处于阻塞状态的线程执行Interrupt方法将使下一次阻塞调用自动失效。    
       
   isInterrupted()   方法    
   n/a    
   如果该线程处于阻塞状态,则返回真值。    
       
   sleep(   long   millis   )和sleep(   long   millis,   int   nanos   )    
   Sleep(   int   millisecondTimeout   )   and   Sleep(   System.TimeSpan   )方法    
   使正在执行的线程暂停一段给定的时间,或直到它被中断。这一方法将在Java中将产生一个java.lang.InterruptedException状态,在C#中将产生System.Threading.   ThreadInterruptedException状态。    
       
   join()、join(   long   millis   )和join(   long   millis,   int   nanos   )   方法    
   Join()、Join(   int   millisecondTimeout   )和Join(   System.TimeSpan   )   方法   与Java中仅依靠超时设定不同的是,在C#语言中则依据线程停止运行是由于线程死亡(返回真)或是超时(返回假)而返回一个布尔型变量。    
       
   suspend()   方法    
   Suspend()   方法    
   二者的功能相同。这一方法容易引起死循环,如果一个占有系统关健资源的线程被挂起来,则在这一线程恢复运行之前,其他的线程不能访问该资源。    
       
   resume()   方法    
   Resume()   方法    
   恢复一个被挂起的线程。    
       
   stop()   方法    
   Abort()   方法    
   参见下面的“线程停止”部分。    
   (特别说明,在上面的表中,每个小节的第一行是java中的方法,第二行是C#中的方法,第三行是有关的注释,由于在文本文件中不能组织表格,请编辑多费点心组织表格,原文中有表格的格式。)    
   线程的中止    
   由于能够在没有任何征兆的情况下使运行的程序进入一种混乱的状态,Java中的Thread.stop受到了普遍的反对。根据所调用的stop()方法,一个未经检查的java.lang.ThreadDeath错误将会破坏正在运行着的程序的栈,随着它的不断运行,能够解除任何被锁定的对象。由于这些锁被不分青红皂白地被打开,由它们所保护的数据就非常可能陷入混乱状态中。    
   根据当前的Java文档,推荐的中止一个线程的方法是让运行的线程检查一个由其他的线程能够改变的变量,该变量代表一个“死亡时间”条件。下面的程序就演示了这种方法。

   //   条件变量    
   private   boolean   timeToDie   =   false;    
       
   //   在每次迭代中对条件变量进行检查。    
   class   StoppableRunnable    
   extends   Runnable   {    
   public   void   run()   {    
   while(   !timeToDie   )   {    
   //   进行相应的操作    
       
   }    
       
   }    
       
   } 
     
     
   上述的讨论对C#中的Abort方法也适合。根据调用的Abort方法,令人捉摸不定的System.Threading.ThreadAbortException可能会破坏线程的栈,它可能释放线程保持的一些变量,使处于保护状态中的数据结构出现不可预测的错误。我建议使用与上面所示的相似的方法来通知一个应该死亡的线程。   

保留地址 http://www.qqread.com/csharp/z319084.html进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章