日期:2014-05-18 浏览次数:21118 次
using System;
using System.Threading;
public class Worker
{
// 在线程启动时此方法将被调用
public void DoWork()
{
while (!_shouldStop) // 如果线程正在运行则打印信息
{
Console.WriteLine("worker thread: working...");
}
Console.WriteLine("worker thread: terminating gracefully.");
}
public void RequestStop()
{
_shouldStop = true;
}
// Volatile这个关键字用来提醒编译器这个数据成员将被多线程访问
private volatile bool _shouldStop; // 应该停止
}
public class Program
{
static void Main()
{
// 创建一个线程对象. 这里并不是线程的开始
Worker workerObject = new Worker();
// 这里定义一个新的线程,注意这里没有使用ThreadStart委托
// 另外构造函数接受的是对象的方法的名称
Thread workerThread = new Thread(workerObject.DoWork);
// 这里才是线程的真正开始
workerThread.Start();
Console.WriteLine("主线程: worker线程开始...");
// 循环直到线程被激活,Thread的IsAlive这个属性表示线程是否为活动的
while (!workerThread.IsAlive);
// 将主线程暂停1毫秒,以允许worker这个线程完成自己的工作
Thread.Sleep(1);
// 需要worker这个线程自动停止
workerObject.RequestStop();
// 使用Join这个方法来阻塞当前线程,直到对象的线程终止 workerThread.Join();
Console.WriteLine("main thread: Worker thread has terminated.");
}
}