第二章 .NET中的线程
.NET有关线程操作都在System.Threading 命名空间,查看MSDN可以看出以下信息:
System.Threading 命名空间提供一些使得可以进行多线程编程的类和接口。 除了同步的线程活动和访问选件类外数据(Mutex、Monitor、Interlocked,AutoResetEvent,等等),此命名空间包括允许您使用由系统提供的线程池的 ThreadPool 选件类,因此,在线程池中执行回调方法的 Timer 选件类线程。
类 | 说明 | |
---|---|---|
AbandonedMutexException | 当某个线程获取由另一个线程放弃(即在未释放的情况下退出)的 Mutex 对象时引发的异常。 | |
AutoResetEvent | 通知正在等待的线程已发生事件。 此类不能被继承。 | |
Barrier | 使多个任务能够采用并行方式依据某种算法在多个阶段中协同工作。 | |
BarrierPostPhaseException | Barrier 阶段后操作失败时引发的异常。 | |
CancellationTokenSource | 通知 CancellationToken,告知其应被取消。 | |
CompressedStack | 提供方法用于设置和捕获当前线程上的压缩堆栈。 此类不能被继承。 | |
CountdownEvent | 表示在计数变为零时处于有信号状态的同步基元。 | |
EventWaitHandle | 表示一个线程同步事件。 | |
ExecutionContext | 管理当前线程的执行上下文。 此类不能被继承。 | |
HostExecutionContext | 在线程之间封装并传播宿主执行上下文。 | |
HostExecutionContextManager | 提供使公共语言运行时宿主可以参与执行上下文的流动(或移植)的功能。 | |
Interlocked | 为多个线程共享的变量提供原子操作。 | |
LazyInitializer | 提供延迟初始化例程。 | |
LockRecursionException | 当进入锁定状态的递归与此锁定的递归策略不兼容时引发的异常。 | |
ManualResetEvent | 通知一个或多个正在等待的线程已发生事件。 此类不能被继承。 | |
ManualResetEventSlim | 提供 ManualResetEvent 的简化版本。 | |
Monitor | 提供同步访问对象的机制。 | |
Mutex | 一个同步基元,也可用于进程间同步。 | |
Overlapped | 提供一个 Win32 OVERLAPPED 结构的托管表示形式,包括将信息从 Overlapped 实例传输到 NativeOverlapped 结构的方法。 | |
ReaderWriterLock | 定义支持单个写线程和多个读线程的锁。 | |
ReaderWriterLockSlim | 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。 | |
RegisteredWaitHandle | 表示在调用 RegisterWaitForSingleObject 时已注册的句柄。 此类不能被继承。 | |
Semaphore | 限制可同时访问某一资源或资源池的线程数。 | |
SemaphoreFullException | 对计数已达到最大值的信号量调用 Semaphore.Release 方法时引发的异常。 | |
SemaphoreSlim | 对可同时访问资源或资源池的线程数加以限制的 Semaphore 的轻量替代。 | |
SynchronizationContext | 提供在各种同步模型中传播同步上下文的基本功能。 | |
SynchronizationLockException | 当某个方法请求调用方拥有给定 Monitor 上的锁时将引发该异常,而且由不拥有该锁的调用方调用此方法。 | |
Thread | 创建并控制线程,设置其优先级并获取其状态。 | |
ThreadAbortException | 当对 Abort 方法发出调用时引发的异常。 此类不能被继承。 | |
ThreadExceptionEventArgs | 为 ThreadException 事件提供数据。 | |
ThreadInterruptedException | 中断处于等待状态的 Thread 时引发的异常。 | |
ThreadLocal<T> | 提供数据的线程本地存储。 | |
ThreadPool | 提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。 | |
ThreadStartException | 当基础操作系统线程已启动但该线程尚未准备好执行用户代码前,托管线程中出现错误,则会引发异常。 | |
ThreadStateException | 当 Thread 处于对方法调用无效的 ThreadState 时引发的异常。 | |
Timeout | 包含指定无限超时间隔的常数。 此类不能被继承。 | |
Timer | 提供以指定的时间间隔执行方法的机制。 此类不能被继承。 | |
Volatile | 包含执行的易失存储器操作方法。 | |
WaitHandle | 封装等待对共享资源的独占访问的操作系统特定的对象。 | |
WaitHandleCannotBeOpenedException | 在尝试打开不存在的系统互斥体或信号量时引发的异常。 |
本书第二章重点介绍了Thread 这个类
Thread 类
创建并控制线程,设置其优先级并获取其状态。
构造函数
名称 | 说明 | |
---|---|---|
Thread(ParameterizedThreadStart) | 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。 | |
Thread(ThreadStart) | 初始化 Thread 类的新实例。 | |
Thread(ParameterizedThreadStart, Int32) | 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。 | |
Thread(ThreadStart, Int32) | 初始化 Thread 类的新实例,指定线程的最大堆栈大小。 |
属性
名称 | 说明 | |
---|---|---|
ApartmentState | 已过时。 获取或设置此线程的单元状态。 | |
CurrentContext | 获取线程正在其中执行的当前上下文。 | |
CurrentCulture | 获取或设置当前线程的区域性。 | |
CurrentPrincipal | 获取或设置线程的当前负责人(对基于角色的安全性而言)。 | |
CurrentThread | 获取当前正在运行的线程。 | |
CurrentUICulture | 获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源。 | |
ExecutionContext | 获取一个 ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息。 | |
IsAlive | 获取一个值,该值指示当前线程的执行状态。 | |
IsBackground | 获取或设置一个值,该值指示某个线程是否为后台线程。 | |
IsThreadPoolThread | 获取一个值,该值指示线程是否属于托管线程池。 | |
ManagedThreadId | 获取当前托管线程的唯一标识符。 | |
Name | 获取或设置线程的名称。 | |
Priority | 获取或设置一个值,该值指示线程的调度优先级。 | |
ThreadState |
获取一个值,该值包含当前线程的状态。 |
方法
名称 | 说明 | |
---|---|---|
Abort() | 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。 | |
Abort(Object) | 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程并提供有关线程终止的异常信息的过程。调用此方法通常会终止线程。 | |
AllocateDataSlot | 在所有的线程上分配未命名的数据槽。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
AllocateNamedDataSlot | 在所有线程上分配已命名的数据槽。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
BeginCriticalRegion | 通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常的影响可能会危害应用程序域中的其他任务。 | |
BeginThreadAffinity | 通知宿主托管代码将要执行依赖于当前物理操作系统线程的标识的指令。 | |
DisableComObjectEagerCleanup | 对于当前线程关闭运行时可调用包装 (RCW) 的自动清理。 | |
EndCriticalRegion | 通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常仅影响当前任务。 | |
EndThreadAffinity | 通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令。 | |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自 Object。) | |
FreeNamedDataSlot | 为进程中的所有线程消除名称与槽之间的关联。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
GetApartmentState | 返回一个 ApartmentState 值,该值指示单元状态。 | |
GetCompressedStack | 已过时。返回一个 CompressedStack 对象,该对象可用于捕获当前线程的堆栈。 | |
GetData | 在当前线程的当前域中从当前线程上指定的槽中检索值。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
GetDomain | 返回当前线程正在其中运行的当前域。 | |
GetDomainID | 返回唯一的应用程序域标识符。 | |
GetHashCode | 返回当前线程的哈希代码。 (重写 Object.GetHashCode()。) 在 XNA Framework 3.0 中,此成员继承自 Object.GetHashCode(). 在 可移植类库 可移植类库 中,此成员继承自 Object.GetHashCode(). |
|
GetNamedDataSlot | 查找已命名的数据槽。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
GetType | 获取当前实例的 Type。 (继承自 Object。) | |
Interrupt | 中断处于 WaitSleepJoin 线程状态的线程。 | |
Join() | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止为止。 | |
Join(Int32) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时间为止。 | |
Join(TimeSpan) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时间为止。 | |
MemoryBarrier | 按如下方式同步内存存取:执行当前线程的处理器在对指令重新排序时,不能采用先执行 MemoryBarrier 调用之后的内存存取,再执行 MemoryBarrier 调用之前的内存存取的方式。 | |
ResetAbort | 取消为当前线程请求的 Abort。 | |
Resume | 已过时。继续已挂起的线程。 | |
SetApartmentState | 在线程启动前设置其单元状态。 | |
SetCompressedStack | 已过时。对当前线程应用捕获的 CompressedStack。 | |
SetData | 在当前正在运行的线程上为此线程的当前域在指定槽中设置数据。为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 | |
SetProcessorAffinity | 在用于 Xbox 360 的 .NET Compact Framework 中,为托管线程设置处理器关联。运行线程的处理器取决于处理器关联。 | |
Sleep(Int32) | 将当前线程挂起指定的时间。 | |
Sleep(TimeSpan) | 将当前线程阻塞指定的时间。 | |
SpinWait | 导致线程等待由 iterations 参数定义的时间量。 | |
Start() | 导致操作系统将当前实例的状态更改为 ThreadState.Running。 | |
Start(Object) | 使操作系统将当前实例的状态更改为 ThreadState.Running,并选择提供包含线程执行的方法要使用的数据的对象。 | |
Suspend | 已过时。挂起线程,或者如果线程已挂起,则不起作用。 | |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) | |
TrySetApartmentState | 在线程启动前设置其单元状态。 | |
VolatileRead(Byte) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Double) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Int16) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Int32) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Int64) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(IntPtr) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Object) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(SByte) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(Single) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(UInt16) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(UInt32) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(UInt64) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileRead(UIntPtr) | 读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值。 | |
VolatileWrite(Byte, Byte) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Double, Double) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Int16, Int16) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Int32, Int32) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Int64, Int64) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(IntPtr, IntPtr) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Object, Object) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(SByte, SByte) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(Single, Single) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(UInt16, UInt16) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(UInt32, UInt32) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(UInt64, UInt64) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
VolatileWrite(UIntPtr, UIntPtr) | 立即向字段写入一个值,以使该值对计算机中的所有处理器都可见。 | |
Yield | 导致调用线程执行准备好在当前处理器上运行的另一个线程。由操作系统选择要执行的线程。 |