先来看看使用Thread类来实现多线程,示例代码如下:
注意:
可以通过workerThread.Priority = ThreadPriority.X设置线程的优先级。
ThreadPriority是个枚举类型,包括:Highest,AboveNormal,Normal,BelowNormal和Lowest。
一般当前线程(Thread.CurrentThread)被默认设置成Normal。
不过如今的CPU都已经相当的快了,上例中即便把workerThread.Priority = ThreadPriority.Highest;当输入的数字很小,譬如输入1,也就是运算量较小的时候,主线程也能顺利的抢在Work线程之前完成任务的。但是随便interval设置值增大,情况就有所不同了。
再来看看如何使用ThreadPool创建线程:
使用Thread类来创建线程是很昂股的(CPU密集型)。所以CLR提供了线程池来供应用程序使用,演示代码如下:
注意:
使用WaitCallback委托时还可以传送一个参数,例如把上面的代码改成:
ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod), "First Thread");
Thread.Sleep(100);
ThreadPool.QueueUserWorkItem(new WaitCallback(StartMethod), "Second Thread");
Console.ReadLine();
接着在StartMethod里可以使用它,例如;
static void StartMethod(Object stateInfo)
{
//DisplayNumbers("Thread " + DateTime.Now.Millisecond.ToString());
DisplayNumbers("Thread " + stateInfo.ToString());
Console.WriteLine("Thread Finished");
}