C#多线程学习笔记(二)
a.其它线程都是依附于Main()函数所在的线程的
Main()函数是C#程序的入口,起始线程可以称之为主线程
如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
而所有的线程虽然在微观上是串行执行的,但是在宏观上你完全可以认为它们在并行执行。
b.可能通过Thread.ThreadState来访问线程当前的状态
Aborted:线程已停止
AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止
Background:线程在后台执行,与属性Thread.IsBackground有关
Running:线程正在正常运行
Stopped:线程已经被停止
StopRequested:线程正在被要求停止
Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行)
SuspendRequested:线程正在要求被挂起,但是未来得及响应
Unstarted:未调用Thread.Start()开始线程的运行
WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态
Main()函数是C#程序的入口,起始线程可以称之为主线程
如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
而所有的线程虽然在微观上是串行执行的,但是在宏观上你完全可以认为它们在并行执行。
b.可能通过Thread.ThreadState来访问线程当前的状态
c.后台线程与前台线程的区别在于
后台线程那不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR(通用语言运行环境)将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。
d.设置Thread的优先级
当线程之间争夺CPU时间时,CPU按照是线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest,
在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal。给一个线程指定优先级
我们可以使用如下代码来设置线程的优先级
//设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;
myThread.Priority=ThreadPriority.Lowest;
posted on 2008-06-21 23:27 dinglin2006 阅读(357) 评论(0) 编辑 收藏 举报