线程的优先级

设置或者获得当前线程的优先级:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{

// 线程调度
Thread t5 = new Thread(ThreadMethed);
// 获取一个值,该值包含当前线程的状态
Console.WriteLine(" Thread线程状态:{0} ", t5.ThreadState.ToString());
t5.Start();
t5.Priority = ThreadPriority.Highest;// 设置线程优先级
Console.WriteLine(" Thread线程状态:{0} ", t5.ThreadState.ToString());
Console.WriteLine(" 主线程-执行 ");
Console.WriteLine(" Thread线程状态:{0} ", t5.ThreadState.ToString());
Thread.Sleep(5000);
Console.WriteLine(" Thread线程状态:{0} ", t5.ThreadState.ToString());
Console.ReadLine();
}

/// <summary>
/// 线程开始时执行的方法
/// </summary>
static void ThreadMethed()
{
Console.WriteLine(Thread.CurrentThread.Name+" Thread Start! ");
Console.WriteLine(" Thread线程的优先级:{0} ", Thread.CurrentThread.Priority.ToString());
Thread.CurrentThread.Priority = ThreadPriority.Lowest;
Console.WriteLine(" Thread线程的优先级:{0} ", Thread.CurrentThread.Priority.ToString());
Thread.Sleep(3000);
Console.WriteLine(Thread.CurrentThread.Name + " Thread End! ");

}
}
}


线程池的调度

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ThreadTest
{
class Program
{
static void Main(string[] args)
{
// 通知正在等待的线程已发生事件
// 若要将初始状态设置为终止,则为 true;若要将初始状态设置为非终止,则为 false。
AutoResetEvent autoEvent = new AutoResetEvent(false);

Thread regularThread = new Thread(new ThreadStart(ThreadMethod));
regularThread.Start();
ThreadPool.QueueUserWorkItem(new WaitCallback(WorkMethod), autoEvent);

// 阻塞当前(主线程)线程,并等待通知
autoEvent.WaitOne();
Console.WriteLine("主线程等待并得到了通知 ");
Console.ReadLine();

}

static void ThreadMethod()
{
Console.WriteLine("ThreadOne, executing ThreadMethod, is {0}from the thread pool.", Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");
}

static void WorkMethod(object stateInfo)
{
Console.WriteLine("ThreadTwo, executing WorkMethod, is {0}from the thread pool.",Thread.CurrentThread.IsThreadPoolThread ? "" : "not ");
Thread.Sleep(5000);
// 将事件状态设置为终止状态,允许一个或多个等待线程继续
((AutoResetEvent)stateInfo).Set();
}

}
}

运行结果如下:

 


线程中,方法 autoEvent.WaitOne();将阻塞调用线程,直到得到通知。

线程调用((AutoResetEvent)stateInfo).Set(); 后,通知被阻塞的线程,这时候,被阻塞的线程,才能被执行。



posted on 2012-01-15 23:52  金丝猴  阅读(248)  评论(0编辑  收藏  举报