第二章 .NET中的线程
.NET有关线程操作都在System.Threading 命名空间,查看MSDN可以看出以下信息:
Timer 选件类线程。
| 类 | 说明 | |
|---|---|---|
|
|
AbandonedMutexException | Mutex 对象时引发的异常。 |
|
|
AutoResetEvent | 此类不能被继承。 |
|
|
Barrier | 使多个任务能够采用并行方式依据某种算法在多个阶段中协同工作。 |
|
|
BarrierPostPhaseException | Barrier 阶段后操作失败时引发的异常。 |
|
|
CancellationTokenSource | CancellationToken,告知其应被取消。 |
| CompressedStack | 此类不能被继承。 | |
|
|
CountdownEvent | 表示在计数变为零时处于有信号状态的同步基元。 |
|
|
EventWaitHandle | 表示一个线程同步事件。 |
| ExecutionContext | 此类不能被继承。 | |
| HostExecutionContext | 在线程之间封装并传播宿主执行上下文。 | |
| HostExecutionContextManager | 提供使公共语言运行时宿主可以参与执行上下文的流动(或移植)的功能。 | |
|
|
Interlocked | 为多个线程共享的变量提供原子操作。 |
|
|
LazyInitializer | 提供延迟初始化例程。 |
|
|
LockRecursionException | 当进入锁定状态的递归与此锁定的递归策略不兼容时引发的异常。 |
|
|
ManualResetEvent | 此类不能被继承。 |
|
|
ManualResetEventSlim | ManualResetEvent 的简化版本。 |
|
|
Monitor | 提供同步访问对象的机制。 |
|
|
Mutex | 一个同步基元,也可用于进程间同步。 |
| Overlapped | NativeOverlapped 结构的方法。 | |
| ReaderWriterLock | 定义支持单个写线程和多个读线程的锁。 | |
|
|
ReaderWriterLockSlim | 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。 |
| RegisteredWaitHandle | 此类不能被继承。 | |
|
|
Semaphore | 限制可同时访问某一资源或资源池的线程数。 |
|
|
SemaphoreFullException | Semaphore.Release 方法时引发的异常。 |
|
|
SemaphoreSlim | Semaphore 的轻量替代。 |
|
|
SynchronizationContext | 提供在各种同步模型中传播同步上下文的基本功能。 |
|
|
SynchronizationLockException | 当某个方法请求调用方拥有给定 Monitor 上的锁时将引发该异常,而且由不拥有该锁的调用方调用此方法。 |
|
|
Thread | 创建并控制线程,设置其优先级并获取其状态。 |
| ThreadAbortException | 此类不能被继承。 | |
| ThreadExceptionEventArgs | ThreadException 事件提供数据。 | |
| ThreadInterruptedException | Thread 时引发的异常。 | |
|
|
ThreadLocal<T> | 提供数据的线程本地存储。 |
|
|
ThreadPool | 提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。 |
| ThreadStartException | 当基础操作系统线程已启动但该线程尚未准备好执行用户代码前,托管线程中出现错误,则会引发异常。 | |
| ThreadStateException | ThreadState 时引发的异常。 | |
|
|
Timeout | 此类不能被继承。 |
|
|
Timer | 此类不能被继承。 |
|
|
Volatile | 包含执行的易失存储器操作方法。 |
|
|
WaitHandle | 封装等待对共享资源的独占访问的操作系统特定的对象。 |
|
|
WaitHandleCannotBeOpenedException | 在尝试打开不存在的系统互斥体或信号量时引发的异常。 |
本书第二章重点介绍了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() | 调用此方法通常会终止线程。 |
|
|
Abort(Object) | 调用此方法通常会终止线程。 |
|
|
AllocateDataSlot | ThreadStaticAttribute 特性标记的字段。 |
|
|
AllocateNamedDataSlot | ThreadStaticAttribute 特性标记的字段。 |
|
|
BeginCriticalRegion | 通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常的影响可能会危害应用程序域中的其他任务。 |
|
|
BeginThreadAffinity | 通知宿主托管代码将要执行依赖于当前物理操作系统线程的标识的指令。 |
| DisableComObjectEagerCleanup | 对于当前线程关闭运行时可调用包装 (RCW) 的自动清理。 | |
|
|
EndCriticalRegion | 通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理的异常仅影响当前任务。 |
|
|
EndThreadAffinity | 通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令。 |
|
|
Equals(Object) | Object。) |
|
|
FreeNamedDataSlot | ThreadStaticAttribute 特性标记的字段。 |
| GetApartmentState | ApartmentState 值,该值指示单元状态。 | |
| GetCompressedStack | 已过时。CompressedStack 对象,该对象可用于捕获当前线程的堆栈。 | |
|
|
GetData | ThreadStaticAttribute 特性标记的字段。 |
|
|
GetDomain | 返回当前线程正在其中运行的当前域。 |
|
|
GetDomainID | 返回唯一的应用程序域标识符。 |
|
|
GetHashCode | GetHashCode(). |
|
|
GetNamedDataSlot | ThreadStaticAttribute 特性标记的字段。 |
|
|
GetType | Object。) |
| Interrupt | WaitSleepJoin 线程状态的线程。 | |
|
|
Join() | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止为止。 |
|
|
Join(Int32) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时间为止。 |
| Join(TimeSpan) | 在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻塞调用线程,直到某个线程终止或经过了指定时间为止。 | |
|
|
MemoryBarrier | MemoryBarrier 调用之前的内存存取的方式。 |
|
|
ResetAbort | Abort。 |
| Resume | 已过时。继续已挂起的线程。 | |
| SetApartmentState | 在线程启动前设置其单元状态。 | |
| SetCompressedStack | 已过时。CompressedStack。 | |
|
|
SetData | ThreadStaticAttribute 特性标记的字段。 |
|
|
SetProcessorAffinity | 运行线程的处理器取决于处理器关联。 |
|
|
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 | 由操作系统选择要执行的线程。 |