一、为线程命名
线程可以在编写代码时被命名,尽管在平时的应用程序使用中线程的名称不是很重要。但对于大型应用程序的调试,线程的名称则可以使程序员的调试工作十分方便。线程的名称在Thread类的Name属性中进行设置。
实例演示为线程命名及如何使用线程名判断当前线程的方法:
using System.Threading;
class program
{
///<summary>
///主函数
///</summary>
static void Main(string[ ] args)
{
//为Main函数的线程命名
Thread.CurrentThread.Name="主程序线程";
//定义一个线程变量t,构造函数中使用的参数是一个方法名
Thread t = new Thread(SayHello);
//为程序中自己创建的线程t命名
t.Name="自定义线程";
//在启动线程的方法中加入一个参数,该参数即SayHello方法使用的参数
t.Start(true);
//以正常方式调用的SayHello方法
SayHello(false);
}
///<summary>
///输出函数
///</summary>
///<param name="isHello">判别输出方式</param>
static void SayHello(object isHello)
{
//首先将object型参数转换为bool型参数
bool hello =(bool)isHello;
//判断,true则输出Hello,否则输出Hi
if(hello)
{
Console.WriteLine("Hello"+Thread.CurrentThread.Name);//输出Hello
}
else
{
Console.WriteLine("Hi"+Thread.CurrentThread.Name);//输出Hi
}
}
}
结果为:
Hello自定义线程
Hi主程序线程
请按任意键继续。。。。。
二、调整线程的优先级
同进程一样,线程之间也存在着优先级的差别。优先级不同的线程获得的CPU资源和其他资源都不相同,这为重要性不同的任务进行区别对待提供了技术基础。线程的优先级设定是通过Thread类的Priority属性进行的。
本节演示如何设定和修改线程的优先级。
using System.Threading;
class program
{
///<summary>
///主函数
///</summary>
static void Main(string[ ] args)
{
//为Main函数的线程命名
Thread.CurrentThread.Name = "主程序线程";
//定义一个线程变量t,构造函数中使用的参数是一个方法名
Thread t=new Thread(SayHello);
//为程序中自己创建的线程t命名
t.Name="自定义线程";
//在启动线程的方法中加入一个参数,该参数即SayHEllo方法使用的参数
t.Start(true);
//以正常方式调用的SayHello方法
SayHello(false);
}
///<summary>
///输出函数
///</summary>
///<param name="isHello">判别输出方式</param>
static void SayHello(object isHello)
{
//首先将object型参数转换为bool型参数
bool hello=(bool) isHello;
//判断,true则输出Hello,否则输出Hi
if(hello)
{
Console.WriteLine("Hello"+Thread.CurrentThread.Name);//输出Hello
Output(Thread.CurrentThread.Name);
}
else
{
Console.WriteLine("Hi"+Thread.CurrentThread.Name);//输出Hi
Output(Thread.CurrentThread.Name);
}
}
///<summary>
///循环输出
///</summary>
///<param name="name">线程名称</param>
static void Output(string name)
{
for(int i=0;i<1000000;i++)
{
if(i%100000 ==0)
{
Console.WriteLine(name + i.ToString());
}
}
}
}
结果为:
Hello自定义线程
自定义线程0
自定义线程100000
自定义线程200000
自定义线程300000
Hi主程序线程
主程序线程0
主程序线程100000
主程序线程200000
主程序线程300000
主程序线程400000
主程序线程500000
主程序线程600000
主程序线程700000
自定义线程400000
自定义线程500000
自定义线程600000
自定义线程700000
自定义线程800000
自定义线程900000
主程序线程800000
主程序线程900000
请按任意键继续
从结果中可以看到,自定义线程和主程序线程交替进行。修改程序代码,在启动自定义线程之前修改其优先级。修改后的Main方法如下,其他代码不变:
static void Main(string[ ] args)
{
//为Main函数的线程命名
Thread.CurrentThread.Name ="主程序线程";
//定义一个线程变量t,构造函数中使用的参数是一个方法名
Thread t=new Thread(SayHello);
//为程序中自己创建的线程t命名
t.Name="自定义线程";
//修改线程t的优先级为ThreadPriority.AboveNormal
t.Priority=ThreadPriority.AboveNormal;
//在启动线程的方法中加入一个参数,该参数即SayHello方法使用的参数
t.Start(true);
//以正常方式调用的SayHello方法
SayHello(false);
}
运行程序,由于自定义线程的优先级比较高,因此自定义线程全部执行完毕后主程序线程才开始执行。