深入浅出多线程系列之一:简单的Thread
CLR和操作系统会自动的为应用程序创建一个线程,这个线程叫做主线程(main Thread)
如果要创建一个新的线程,可以使用Thread类。下面是一个简单的例子:
class ThreadTest
{
static void Main()
{
Thread t = new Thread (WriteY); // 创建一个新的线程来执行WriteY方法
t.Start(); // 开始运行 WriteY()
//在主线程上模拟的做些事情.for (int i = 0; i < 1000; i++) Console.Write ("x");
}
static void WriteY()
{
for (int i = 0; i < 1000; i++) Console.Write ("y");
}
}首先创建了一个线程来执行WriteY方法,然后调用Start()来启动创建的线程,接着在主线程中用for循环输出“x”。
很容易就知道答案:例如XXXXYYYYXXXXXYYYYYXXXXYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXX
X和y间隔的出现。
一旦线程启动了,线程的IsAlive属性在线程结束前就会返回True,当传递给线程的构造函数中的委托执行完毕,线程就结束了,一旦线程结束了,线程是不可能再重新启动的。
CLR为每一个线程分配独立的内存栈,这样就可以保证局部变量隔离。下面是使用局部变量的例子。
class ThreadTest
{
bool done;
public static void Main()
{
ThreadTest tt = new ThreadTest();
new Thread(tt.Go).Start();
tt.Go();
}
void Go()
{
if (!done)
{
done = true;
Console.WriteLine("Done");
}
}
}因为new Thread(tt.Go) 和tt.Go方法都共享tt的done字段。
所以Console.WriteLine("Done")会且只会被执行一变。
我们修改下上面的代码,修改后如下:
class ThreadTest
{
static bool done; //静态变量被所有的线程共享
public static void Main()
{
new Thread(Go).Start();
Go();
}
static void Go()
{
if (!补充:综合编程 , 其他综合 ,