C# 线程手册 第二章 .NET 中的线程
2012-01-07 14:32 DanielWise 阅读(2858) 评论(4) 编辑 收藏 举报概述
在第一章我们描述了什么是线程。我们讲述了很多人可能已经很熟悉的背景知识。知道了线程的哪部分最重要。在这一章,你将看到如何实现一些基本的线程;然而了解何时使用线程相对知道基本实现来说更重要一些。
在这章的最后,你将了解:
1. System.Threading 命名空间。
2. 使用线程时有什么设计问题?
3. 线程使用什么资源?
4. 使用线程时要避免什么错误?
System.Threading 命名空间
我们已经说过托管代码中的线程由一个System.Threading线程类实例。在这部分,我们将进一步讨论System.Threading命名空间和它的内容。
System.Threading命名空间的类在下表中列出。
类 | 描述 |
AutoResetEvent | 这个事件通知一个或者多个正在等待的线程事件已经发生。 |
Interlocked | 这个类通过为由多个线程共享的变量提供原子操作来避免发生错误。 |
ManualResetEvent | 当通知一个或者多个等待的线程已经发生一个事件时发生。 |
Monitor | 这个类提供一个同步访问对象的架构。 |
Mutex | 为一个线程提供共享资源独占访问的一个同步原型。也可用于内部进程同步。 |
ReaderWriterLock | 定义一个允许单写-多读语法。 |
RegisteredWaitHandle | 这个类表示一个当调用RegisterWaitForSingleObject()方法注册的句柄。 |
SynchronizationLockException | 当一个同步方法从一个异步代码块调用的时候抛出这个异常。 |
Thread | 这个类创建并控制一个线程,设置线程优先级并获取其状态。 |
ThreadAbortException | 当调用Abort()方法时抛出这个异常。 |
ThreadExceptionEventArgs | 为ThreadException事件提供数据。 |
ThreadInterruptedException | 当线程处于wating状态时的异常中断会导致这个异常。 |
ThreadPool | 这个类提供一个可以用来执行工作,处理异步I/O,等待其他线程以及处理定时器的线程池。 |
ThreadStateException | 当方法调用的时候且线程处于一个不合法的状态时抛出这个异常。 |
Timeout | 这个类简单地包含了一个我们想要确定特定时间的常量。 |
Timer | 这个类提供在特定间隔中执行方法的结构。 |
WaitHandle | 这个类将等待对一个共享资源独享访问的操作系统对象封装起来。 |
我们不会在这部分所有的类,但是知道这个命名空间为我们提供了哪些类是很重要的。其他类将会在后续章节讨论。
线程类
到目前为止,我们将要重点讨论线程类,因为这个类表示了我们使用的进程。这个类允许我们做很多事情,从管理一个线程的优先级到读线程的状态。
让我们从查看这个类的公共方法的表格开始。
公共方法名 | 描述 |
Abort() | 这个重载方法在它被调用的线程中引发一个ThreadAbortException, 并开始终止线程的过程。调用这个方法通常会终止线程。 |
AllocateDataSlot() | 这个静态方法在所有线程上分配一个未命名的数据槽。 |
AllocateNamedSlot() | 这个静态方法在所有线程上分配一个命名的数据槽。 |
FreeNamedDataSlot() | 这个静态方法释放一个之前分配的命名数据槽。 |
GetData() | 这个静态方法从当前线程的当前应用程序域特定位置收集数据。 |
GetDomain() | 这个静态方法返回当前线程所属的当前应用程序域。 |
GetDomainID() | 这个静态方法返回一个唯一的应用程序域标志。 |
GetHashCode() | 这个方法作为一个特定类型的哈希函数,适用于哈希算法和数据结构(哈希表)。 |
GetNamedDataSlot() | 这个静态方法寻找一个命名的数据槽。 |
Interrupt() | 这个方法中断状态为WaitSleepJoin的线程。 |
Join() | 这个重载方法阻塞调用线程直到一个线程终止。 |
ResetAbort() | 这个静态方法为当前线程取消Abort()请求。 |
Resume() | 这个方法恢复阻塞的线程。 |
SetData() | 这个静态方法为线程的当前程序域设定数据。 |
Sleep() | 这个静态重载方法按照特定毫秒阻塞当前线程。 |
SpinWait() | 这个静态方法导致一个线程等待由迭代参数定义的时间。 |
Start() | 这个方法会导致操作系统将当前线程的状态置成ThreadState.Running. |
Suspend() | 这个方法会阻塞线程,如果当前线程已经阻塞,会不起作用。 |
现在让我们看看另外一张表,这次包含了线程的公共属性。
公共属性名 | 描述 |
ApartmentState | 或者或者设置当前线程的单元状态。 |
CurrentContext | 这个静态属性获取正在执行的线程的上下文。 |
CurrentCulture | 获取或者设置当前线程的文化背景。 |
CurrentPrincipal | 这个静态属性获取或设置线程当前的身份。对基于角色的安全很重要。 |
CurrentThread | 这个静态属性获取当前正在运行的线程。 |
CurrentUICulture | 在运行时使用,这个属性被资源管理器用来寻找特定文化资源。 |
IsAlive | 获取当前线程执行状态值。 |
IsBackground | 获取或设置当前线程是不是后台线程。 |
IsThreadPoolThread | 获取当前线程是不是一个线程池的一部分。 |
Name | 获取或者设置当前线程名。 |
Priority | 获取或者设置一个线程的执行优先级。 |
ThreadState | 获取当前线程的状态。 |
再次,我们不会在这一章使用所有公共属性。我们已经看过了这些类成员,但是除了我们使用它们创建一个线程否则对我们来说它们没什么用。所以下一篇我们将会创建一个简单的C#线程示例。
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。