01.开启线程
通过Thread类创建了一个线程对象,然后通过IsBackground属性指明该线程为后台线程,如果不设置,默认为前台线程。由于前台线程执行完毕后CLR会无条件的中止后台线程的运行,所以在前面的代码中,若是启动了后台线程,主线程将会继续执行。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("前台线程ID:"+Thread.GetCurrentProcessorId());
Thread thread=new Thread(Worker);
thread.IsBackground = true; //是否为后台线程
thread.Start();
Console.ReadKey();
}
public static void Worker()
{
Console.WriteLine("后台线程ID:"+Thread.GetCurrentProcessorId());
Thread.Sleep(2000); //线程休眠2秒
Console.WriteLine("后台线程退出");
}
}
02.
Join()方法能保证主线程(前台线程)在异步线程thread(后台线程)运行结束后才会运行。
使用函数Join来实现,确保主线程会在后台线程结束后才开始运行
使用Join的时候,主线程会等待后台线程结束之后才能继续执行。前面的代码中,我们使用了Thread构造函数来创建线程对象
static void Main(string[] args)
{
Thread backthread=new Thread(Worker);
backthread.IsBackground = true; //后台线程
backthread.Start();
backthread.Join(); //保证后台线程完成之后调用主线程
Thread.Sleep(1000);
Sum();
}
private static void Sum()
{
Console.WriteLine("this is main thread" );
Console.WriteLine("Return from Main Thread");
}
private static void Worker()
{
Thread.Sleep(2000);
Console.WriteLine("Return from Worker Thread");
}
03.执行带参数的线程
通过ParameterizedThreadStart委托的方式来实现多线程。
static void Main(string[] args)
{
// 创建一个新线程(默认为前台线程)
//如果新线程上运行带参数的方法,需要用到ParameterizedThreadStart委托,
//TreadStart委托仅仅指向无参数且无返回值的方法
//要求只能有一个参数,且为object类型 无返回值
Thread backthread = new Thread(new ParameterizedThreadStart(Worker));
backthread.Start(111);
Sum();
}
private static void Sum()
{
Console.WriteLine("this is main thread" );
Console.WriteLine("Return from Main Thread");
}
private static void Worker(object obj)
{
Thread.Sleep(2000);
Console.WriteLine("Return from Worker Thread:"+obj);
}