C#线程从陌生到熟悉:突飞猛进

发表于:2011-12-26 09:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  谈到线程(Thread),大家应该不会陌生。和他相近的还有一个进程的概念(Process)。那首先我们先来熟悉他们的概念,以及他们之间的关系。

  什么是进程?

  当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。

  而一个进程又是由多个线程所组成的。

  什么是线程?

  线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

  他们的关系?

  线程跟进程既有联系又有区别。进程是代码在数据集的一次执行,是系统资源分配的基本单位。任何一个线程必然在一个进程中运行;而一个进程至少拥有一个线程,否则无法执行。事实上,每个进程都有一个主线程,该线程所拥有的其他线程都是由主线程创建的。如果我们s结束一个进程的主线程,就会结束该进程的所有其他线程,也就结束整个进程!

  我们可以这么理解:真正去运行代码是线程!而进程只是为运行代码配置所运行的系统资源。几个线程共同运行完成某项功能,组织了一次代码执行过程!这样就有了进程!

  C#里面是Thread类来表示线程的!那我们先来看看Thread类的定义。

以下是代码片段:
[ComVisibleAttribute(true)]
  [ClassInterfaceAttribute(ClassInterfaceType.None)]
  public sealed class Thread : CriticalFinalizerObject,
  _Thread
  {
  ...
  }

  [ComVisibleAttribute(true)]这个表示控制程序集中个别托管类型、成员或所有类型对 COM 的可访问性。

  [ClassInterfaceAttribute(ClassInterfaceType.None)]为公开给 COM 的类指定要生成的类接口的类型(如果有接口生成)。

  在从 CriticalFinalizerObject 类派生的类中,公共语言运行库 (CLR) 保证所有关键终止代码都有机会执行,即使是在 CLR 强行卸载应用程序域或中止线程的情况中(只要终结器遵守 CER 的规则);

  _Thread此接口用于从非托管代码访问托管类,不应从托管代码调用。

  这里注意的Thread类在.net是声明sealed,他是无法被继承的!这和Java的区别挺大的!

  他有4个构造函数,我们主要看下其中两个就行了!

  [SecuritySafeCritical]

  public Thread(ParameterizedThreadStart start);

  [SecuritySafeCritical]

  public Thread(ThreadStart start);

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号