c# System.Threading.Thread
using System;
using System.Threading; // Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
for (int i = ; i < ; i++) {
Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep();
}
} public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc)); // Start ThreadProc. Note that on a uniprocessor, the new
// thread does not get any processor time until the main thread
// is preempted or yields. Uncomment the Thread.Sleep that
// follows t.Start() to see the difference.
t.Start();
//Thread.Sleep(0); for (int i = ; i < ; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep();
} Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}
using System;
using System.Threading; // Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends. private static ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(); public static void show(String thread_name, int run_count)
{
//cacheLock.EnterWriteLock(); for (int i = ; i < run_count; i++) {
Console.WriteLine("{0} runs {1}.", thread_name, i);
//Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep();
}
//cacheLock.ExitWriteLock();
} public static void ThreadProc() {
string name = Thread.CurrentThread.Name;
show(name, );
/*
cacheLock.EnterReadLock(); Console.WriteLine("{0} runs.", name); for (int i = 0; i < 10; i++) { Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep(0);
}
cacheLock.ExitReadLock();*/
} public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
for (int i = ; i < ; i++)
{
Thread t = new Thread(ThreadProc);
t.Name = "Thread_" + i;
t.Start();
}
Thread.Sleep();
//Thread t = new Thread(new ThreadStart(ThreadProc)); // Start ThreadProc. Note that on a uniprocessor, the new
// thread does not get any processor time until the main thread
// is preempted or yields. Uncomment the Thread.Sleep that
// follows t.Start() to see the difference.
//t.Start();
//Thread.Sleep(1); for (int i = ; i < ; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep();
} Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
//t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}
构造函数
| Thread(ParameterizedThreadStart) |
初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。 |
| Thread(ParameterizedThreadStart, Int32) |
初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。 |
| Thread(ThreadStart) |
初始化 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(String) |
在所有线程上分配已命名的数据槽。 为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 |
| BeginCriticalRegion() |
通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响可能会危害应用程序域中的其他任务。 |
| BeginThreadAffinity() |
通知主机托管代码将要执行依赖于当前物理操作系统线程的标识的指令。 |
| DisableComObjectEagerCleanup() |
对于当前线程关闭运行时可调用包装 (RCW) 的自动清理。 |
| EndCriticalRegion() |
通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响限于当前任务。 |
| EndThreadAffinity() |
通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令。 |
| Equals(Object) |
确定指定的对象是否等于当前对象。 (Inherited from Object) |
| Finalize() |
确保垃圾回收器回收 Thread 对象时释放资源并执行其他清理操作。 |
| FreeNamedDataSlot(String) |
为进程中的所有线程消除名称与槽之间的关联。 为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 |
| GetApartmentState() |
返回表示单元状态的 ApartmentState 值。 |
| GetCompressedStack() |
返回 CompressedStack 对象,此对象可用于获取当前线程的堆栈。 |
| GetData(LocalDataStoreSlot) |
在当前线程的当前域中从当前线程上指定的槽中检索值。 为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 |
| GetDomain() |
返回当前线程正在其中运行的当前域。 |
| GetDomainID() |
返回唯一的应用程序域标识符。 |
| GetHashCode() |
返回当前线程的哈希代码。 |
| GetNamedDataSlot(String) |
查找命名的数据槽。 为了获得更好的性能,请改用以 ThreadStaticAttribute 特性标记的字段。 |
| GetType() |
获取当前实例的 Type。 (Inherited from Object) |
| Interrupt() |
中断处于 WaitSleepJoin 线程状态的线程。 |
| Join() |
在继续执行标准的 COM 和 |
| Join(Int32) |
在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。 |
| Join(TimeSpan) |
在继续执行标准的 COM 和 SendMessage 消息泵处理期间,阻止调用线程,直到由该实例表示的线程终止或经过了指定时间为止。 |
| MemberwiseClone() |
创建当前 Object 的浅表副本。 (Inherited from Object) |
| MemoryBarrier() |
按如下方式同步内存访问:执行当前线程的处理器在对指令重新排序时,不能采用先执行 MemoryBarrier() 调用之后的内存存取,再执行 MemoryBarrier() 调用之前的内存存取的方式。 |
| ResetAbort() |
取消当前线程所请求的 Abort(Object)。 |
| Resume() |
继续已挂起的线程。 |
| SetApartmentState(ApartmentState) |
在线程启动前设置其单元状态。 |
| SetCompressedStack(CompressedStack) |
将捕获的 CompressedStack 应用到当前线程。 |
| SetData(LocalDataStoreSlot, Object) |
在当前正在运行的线程上为此线程的当前域在指定槽中设置数据。 为了提高性能,请改用用 ThreadStaticAttribute 属性标记的字段。 |
| Sleep(Int32) |
将当前线程挂起指定的毫秒数。 |
| Sleep(TimeSpan) |
将当前线程挂起指定的时间。 |
| SpinWait(Int32) |
导致线程等待由 |
| Start() |
导致操作系统将当前实例的状态更改为 Running。 |
| Start(Object) |
导致操作系统将当前实例的状态更改为 Running,并选择提供包含线程执行的方法要使用的数据的对象。 |
| Suspend() |
挂起线程,或者如果线程已挂起,则不起作用。 |
| ToString() |
返回表示当前对象的字符串。 (Inherited from Object) |
| TrySetApartmentState(ApartmentState) |
在线程启动前设置其单元状态。 |
| 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() |
导致调用线程执行准备好在当前处理器上运行的另一个线程。 由操作系统选择要执行的线程。 |
c# System.Threading.Thread的更多相关文章
- C#中的线程四(System.Threading.Thread)
C#中的线程四(System.Threading.Thread) 1.最简单的多线程调用 System.Threading.Thread类构造方法接受一个ThreadStart委托,改委托不带参数,无 ...
- MVC4 + EF + System.Threading.Thread 出现的问题记录
项目要求是页面监测到后台数据库用户数据(Users)变化,前台做出相应的响应和操作. 一.参考很多资料,大概有几种方式: 参考资料地址:http://www.cnblogs.com/hoojo/p/l ...
- 异常System.Threading.Thread.AbortInternal
异常信息: System.Threading.ThreadAbortException: 正在中止线程. 在 System.Threading.Thread.AbortInternal() 在 Sys ...
- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- System.Threading.Thread的使用及传递参数等总结
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- using System.Threading;
/// <summary> /// 执行动作:耗时而已 /// </summary> private void TestThread(string threadName) { ...
- 多线程学习系列二(使用System.Threading)
一.什么是System.Threading.Thread?如何使用System.Threading.Thread进行异步操作 System.Threading.Thread:操作系统实现线程并提供各种 ...
- 【异常记录(九)】 System.Threading.ThreadAbortException: 正在中止线程
报错如下: System.Threading.ThreadAbortException: Thread was being aborted. at System.Threading.Thread.Ab ...
随机推荐
- Hdu-1098解题报告
Hdu-1098解题报告 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题意:已知存在一个等式f(x)=5*x^13+13*x^5+k*a*x ...
- python编码问题在此终结
转载:https://www.cnblogs.com/whatisfantasy/p/6422028.html 1 版本差异概览 1.1 Python 2.X: str(用于8位文本和二进制数据) ...
- 从零搭建 ES 搜索服务(六)相关性排序优化
一.前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化. 二.相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的--最相关的文档排在最前. 2.1.1 相关 ...
- Effective前端1---chapter 2 用CSS画一个三角形
1.CSS画三角形的画法 第一步:三角形可以用border画出来,首先一个有四个border的div长这样: <div class="triangle"></di ...
- SpringMVC(十一) RequestMapping获取Cookie值
可以在控制器方法中使用类似@CookieValue("JSESSIONID") String sessionID的方式,来获取请求中的Cookie的值. 样例控制器代码 packa ...
- HDU.5765.Bonds(DP 高维前缀和)
题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...
- 【整理】Java 10新特性总结
Java 9才发布几个月,很多玩意都没整明白,Java 10就来了..这时候我真尼玛想说:线上用的JDK 7 ,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10……刚学Java的 ...
- git rewinding head to replay your work on top of it...
git fetch origin git reset --hard origin/<branch>
- Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】
Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...
- BZOJ4966 : 总统选举
线段树维护每个点的最有可能是答案的数以及它的权重. 合并两个节点的时候,将权重互相抵消,保留较大的那一个. 得到答案后,再在对应权值的Treap中查询出现次数,检查是否真正是答案. 时间复杂度$O(n ...