【C#多线程编程实战笔记】一、 线程基础

时间:2022-12-04 04:24:05

创建线程

Thread :所执行的方法不能有参数。

class Program
{
static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread t = new Thread( print_1);
t.Start(); print_2();
Console.ReadLine(); } static void print_1()
{
Console.WriteLine("线程开始...");
string[] a = {"a","b","c","d","e","f","g"}; for (int i = ; i < ; i++)
{ Console.WriteLine(a[i]);
}
} static void print_2()
{
Console.WriteLine("主线程调用方法...");
for (int i = ; i < ; i++)
{
Console.WriteLine(i);
}
}
}

ParameterizedThreadStart:可以接受一个输入参数

 static void Main(string[] args)
{
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start("");
Console.ReadLine();
} static void print_3(object a)
{
Console.WriteLine($"输出{a}");
}

暂停线程

使线程暂停一段时间而不消耗操作系统资源,程序输出之前,将休眠5秒钟,它会尽可能的少占用CPU时间。

 static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start(""); Console.ReadLine();
} static void print_3(object a)
{
Thread.Sleep(TimeSpan.FromSeconds());
Console.WriteLine($"输出{a}");
}

等待线程

让程序等待线程中的计算完成,并使用该线程的结果

        static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
Thread ts = new Thread(new ParameterizedThreadStart(print_3));
ts.Start("");
ts.Join();
Console.WriteLine("主线程继续运行....");
Console.ReadLine();
}

程序运行时,启动了一个耗时的线程。正常情况下,会先打印出  "主线程继续运行....",然后在输出线程中的文字,但我们在程序中调用了ts.Join()方法,该方法允许我们主线程等待线程ts运行完时,主程序再继续运行。借助这个方法可以实现两个线程同步执行步骤,第一个线程会等待另一个线程的结果在继续执行,这时候,第一个线程等待时处于阻塞状态。

线程状态

ts.ThreadState.ToString()

Thread.CurrentThread.ThreadState.ToString()

ps:始终可以通过Thread.CurrentThread静态属性获得当前Thread对象

向线程传递参数

两种:

var t1 = new Thread(TestCounter),其中TestCounter方法必须是obejct类型的单个参数

var t2 =new Thread(()=>TestCounter2(12)),使用lambda表达式