您的位置:首页 > 其它

Thread类的简单使用(Start,Sleep,Join,传参)

2011-11-12 22:28 1046 查看
Thread 类创建并控制线程,设置其优先级并获取其状态。下面以4个例子介绍一下Thread类的常用方法:

1. Start——启动线程。

using System;
using System.Threading;

class Example
{
public static void Loop()
{
for (int j = 1; j <= 20; j++)
{
Console.WriteLine(Thread.CurrentThread.Name + "   j =  " + j);
}
}

public static void Main()
{
Thread.CurrentThread.Name = "MainThread";
Thread newThread = new Thread(new ThreadStart(Loop));
newThread.Name = "NewThread";
newThread.Start();
for (int i = 1; i <= 20; i++)
{
Console.WriteLine(Thread.CurrentThread.Name + "   i =  " + i);
}

Console.ReadLine();
}
}




可以看到,NewThread启动后,与MainThread相互竞争使用CPU。这就是Windows系统的抢占式CPU竞争策略。

2. Sleep——将当前线程挂起指定的时间

using System;
using System.Threading;

class Example
{
public static void Loop()
{
for (int j = 1; j <= 20; j++)
{
Console.WriteLine(Thread.CurrentThread.Name + "   j =  " + j);
}
}

public static void Main()
{
Thread.CurrentThread.Name = "MainThread";
Thread newThread = new Thread(new ThreadStart(Loop));
newThread.Name = "NewThread";
newThread.Start();
for (int i = 1; i <= 20; i++)
{
if (i % 3 == 0)
Thread.Sleep(1);
else
Console.WriteLine(Thread.CurrentThread.Name + "   i =  " + i);
}

Console.ReadLine();
}
}




可以看到,i=3时,MainThread挂起1ms,这1ms内NewThread占用CPU,j从1跑到了11。1ms后MainThread“醒了”,重新与NewThread竞争CPU的使用,结果夺回了CPU的使用权,i从4跑到了5。i=6时,又经历了上述过程。。。
想要更好的理解Sleep方法,请阅读http://www.cnblogs.com/ilove/archive/2008/04/07/1140419.html

3. Join——暂停当前线程,直到调用Join方法的线程终止为止。

using System;
using System.Threading;

class Example
{
public static void Loop()
{
for (int j = 1; j <= 10; j++)
{
Console.WriteLine(Thread.CurrentThread.Name + "   j =  " + j);
}
}

public static void Main()
{
Thread.CurrentThread.Name = "MainThread";
Thread newThread = new Thread(new ThreadStart(Loop));
newThread.Name = "NewThread";
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
newThread.Start();
newThread.Join();
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + "   i =  " + i);
}
}

Console.ReadLine();
}
}




可以看到,i=5时,NewThread开始并调用Join方法暂停了MainThread,直到NewThread终止,MainThread才恢复执行。

4. 为线程传递参数

using System;
using System.Threading;

class Example
{
public static void Say(string message)
{
Console.WriteLine("I'm " + Thread.CurrentThread.Name + ".");
Console.WriteLine("I got a message: " + message);
}

public static void Main()
{
Thread.CurrentThread.Name = "MainThread";
Thread newThread = new Thread(new ThreadStart(() => Say("Hello!")));//为线程传递参数的最简单的方法莫过于执行一个lambda表达式
newThread.Name = "NewThread";
newThread.Start();
newThread.Join();

Console.ReadLine();
}
}




这里使用lambda表达式为NewThread传递参数,还有另外的方法@/article/4793748.html

说明:以上部分实验不具有重复性,请读者不要纠结于:自己实验的结果与本文不同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: