您的位置:首页 > 编程语言 > C#

C# 线程手册 第二章 .NET 中的线程

2012-01-07 14:32 190 查看

概述

在第一章我们描述了什么是线程。我们讲述了很多人可能已经很熟悉的背景知识。知道了线程的哪部分最重要。在这一章,你将看到如何实现一些基本的线程;然而了解何时使用线程相对知道基本实现来说更重要一些。

在这章的最后,你将了解:

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

这个类将等待对一个共享资源独享访问的操作系统对象封装起来。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

我们不会在这部分所有的类,但是知道这个命名空间为我们提供了哪些类是很重要的。其他类将会在后续章节讨论。

线程类

到目前为止,我们将要重点讨论线程类,因为这个类表示了我们使用的进程。这个类允许我们做很多事情,从管理一个线程的优先级到读线程的状态。

让我们从查看这个类的公共方法的表格开始。

[align=left]
公共方法名描述
Abort()这个重载方法在它被调用的线程中引发一个ThreadAbortException, 并开始终止线程的过程。调用这个方法通常会终止线程。
AllocateDataSlot()这个静态方法在所有线程上分配一个未命名的数据槽。
AllocateNamedSlot()这个静态方法在所有线程上分配一个命名的数据槽。
FreeNamedDataSlot()这个静态方法释放一个之前分配的命名数据槽。
GetData()这个静态方法从当前线程的当前应用程序域特定位置收集数据。
GetDomain()这个静态方法返回当前线程所属的当前应用程序域。
GetDomainID()这个静态方法返回一个唯一的应用程序域标志。
GetHashCode()这个方法作为一个特定类型的哈希函数,适用于哈希算法和数据结构(哈希表)。
GetNamedDataSlot()这个静态方法寻找一个命名的数据槽。
Interrupt()这个方法中断状态为WaitSleepJoin的线程。
Join()这个重载方法阻塞调用线程直到一个线程终止。
ResetAbort()这个静态方法为当前线程取消Abort()请求。
Resume()这个方法恢复阻塞的线程。
SetData()这个静态方法为线程的当前程序域设定数据。
Sleep()这个静态重载方法按照特定毫秒阻塞当前线程。
SpinWait()这个静态方法导致一个线程等待由迭代参数定义的时间。
Start()这个方法会导致操作系统将当前线程的状态置成ThreadState.Running.
Suspend()这个方法会阻塞线程,如果当前线程已经阻塞,会不起作用。
[/align]  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

现在让我们看看另外一张表,这次包含了线程的公共属性。

[align=left]
公共属性名描述
ApartmentState或者或者设置当前线程的单元状态。
CurrentContext这个静态属性获取正在执行的线程的上下文。
CurrentCulture获取或者设置当前线程的文化背景。
CurrentPrincipal这个静态属性获取或设置线程当前的身份。对基于角色的安全很重要。
CurrentThread这个静态属性获取当前正在运行的线程。
CurrentUICulture在运行时使用,这个属性被资源管理器用来寻找特定文化资源。
IsAlive获取当前线程执行状态值。
IsBackground获取或设置当前线程是不是后台线程。
IsThreadPoolThread获取当前线程是不是一个线程池的一部分。
Name获取或者设置当前线程名。
Priority获取或者设置一个线程的执行优先级。
ThreadState获取当前线程的状态。
[/align]  

 

 

 

 

 

 

 

 

 

 

 

再次,我们不会在这一章使用所有公共属性。我们已经看过了这些类成员,但是除了我们使用它们创建一个线程否则对我们来说它们没什么用。所以下一篇我们将会创建一个简单的C#线程示例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: