LZY'Blog

记录LZY的生活、行程!

« 使用Thread类的Join方法终止线程使用C#中的lock关键字实现线程同步 »

线程的优先级

  线程的优先级指定一个线程相对于另一个线程的相对优先级。每个线程都有一个分配的优先级。在公共语言运行库内创建的线程最初被分配为Normal优先级,而在公共语言运行库外创建的线程,在进入公共语言运行库时将保留其先前的优先级。

  线程是根据其优先级而调度执行的,用于确定线程执行顺序的调度算法随操作系统的不同而不同。在某些操作系统下,具有最高优先级(相对于可执行线程而言)的线程经过调度后总是首先运行。如果具有相同优先级的多个线程都可用,则程序将遍历处于该优先级的线程,并为每个线程提供一个固定的时间片段来执行。只有具有较高优先级的线程才可以运行,具有较低优先级的线程不会执行。如果在给定的优先级上不再有可运行的线程,则程序将移到下一个较低的优先级并在该优先级上调度线程以执行。如果具有较高优先级的线程可以运行,则具有较低优先级的线程将被抢先,并允许具有较高优先级的线程再次执行。除此之外,当应用程序的用户界面在前台和后台之间移动时,操作系统还可以动态调整线程的优先级。

说明

  一个线程的优先级不影响该线程的状态,该线程的状态在操作系统可以调度该线程之前必须为Running。

  线程的优先级值及说明如下表所示。

表 线程的优先级值及说明
优先级值 说明
AboveNormal 可以将Thread安排在具有Highest优先级的线程之后,在具有Normal优先级的线程之前
BelowNormal 可以将Thread安排在具有Normal优先级的线程之后,在具有Lowest优先级的线程之前
Highest 可以将Thread安排在具有任何其他优先级的线程之前
Lowest 可以将Thread安排在具有任何其他优先级的线程之后
Normal 可以将Thread安排在具有AboveNormal优先级的线程之后,在具有BelowNormal优先级的线程之前。默认情况下,线程具有Normal优先级

  开发人员可以通过访问线程的Priority属性来获取和设置其优先级。Priority属性用来获取或设置一个值,该值指示线程的调度优先级。

  语法如下:

public ThreadPriority Priority{get; set;}

  属性值:ThreadPriority值之一。默认值为Normal。

  【例】创建一个控制台应用程序,其中创建了两个Thread线程类对象,并设置第一个Thread类对象的优先级为最低,然后调用Start方法开启这两个线程。

  代码如下:

//引用 using System.Threading; 命名空间
static void Main(string[] args)
{
    Thread thread1 = new Thread(new ThreadStart(Thread1));   //使用自定义方法Thread1声明线程
    thread1.Priority = ThreadPriority.Lowest;                //设置线程的调度优先级
    Thread thread2 = new Thread(new ThreadStart(Thread2));   //使用自定义方法Thread2声明线程
    thread1.Start();                                         //开启线程一
    thread2.Start();                                         //开启线程二
}

static void Thread1()
{
    int i=5;
    while (i > 0)
    {
        Console.WriteLine("线程一");
        i--;
    }
}

static void Thread2()
{
    Console.WriteLine("线程二");
}

  程序的运行结果如下图所示。

设置线程的优先级
图 设置线程的优先级

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 |

Copyright 2009-2012 LZY'Blog. | ICP:蜀ICP备05027543号