线程等待
/*************************************
/* Copyright (c) 2012 Daniel Dong
*
* Author:Daniel Dong
* Blog: www.cnblogs.com/danielWise
* Email: guofoo@163.com
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace SimpleThread
{
public class JoiningThread
{
static Thread SecondThread;
static Thread FirstThread;
static void First()
{
for (int i = 1; i <= 250; i++)
{
Console.Write(i + " ");
}
}
static void Second()
{
FirstThread.Join();
for (int i = 251; i <= 500; i++)
{
Console.Write(i + " ");
}
}
public static void Main()
{
FirstThread = new Thread(new ThreadStart(First));
SecondThread = new Thread(new ThreadStart(Second));
FirstThread.Start();
SecondThread.Start();
Console.ReadLine();
}
}
}
这个例子的目的是向控制台顺序地输出数字,从1到500. First()方法将会输出前250个数字而Second()方法将会输出后250个。如果不在Second()方法中加FirstThread.Join()的话,执行上下文将会在两个方法之间来回切换,而我们的输出会很乱(试着将这行代码注释掉,然后重新运行一次)。通过Second()方法中调用FirstThread.Join()方法,Second()方法的执行会暂停直到FirstThread执行完。
Join()方法是重载的;它可以接受一个整型数或者一个TimeSpan类型值作为唯一的参数并返回一个布尔型值。调用这两个重载方法的任何一个的效果是线程会阻塞直到另外一个线程完成或者等待时间超时,哪个先发生哪个就起作用。如果线程已经完成那么返回值是true 否则 是false.
该例程转自: http://www.cnblogs.com/danielWise/archive/2012/01/16/2324170.html