C#教程:線程的優(yōu)先權(quán)
來源:原創(chuàng) 作者:小人物 錄入時(shí)間:2009-09-28
內(nèi)容導(dǎo)讀: 每個(gè)線程都具有分配給它的線程優(yōu)先級(jí)。為在公共語言運(yùn)行庫中創(chuàng)建的線程最初分配的優(yōu)先級(jí)為ThreadPriority.Normal。在運(yùn)行庫外創(chuàng)建的線程會(huì)保留它們?cè)谶M(jìn)入托管環(huán)境之前所具有的優(yōu)先級(jí)
線程的優(yōu)先權(quán)
每個(gè)線程都具有分配給它的線程優(yōu)先級(jí)。為在公共語言運(yùn)行庫中創(chuàng)建的線程最初分配的優(yōu)先級(jí)為ThreadPriority.Normal。在運(yùn)行庫外創(chuàng)建的線程會(huì)保留它們?cè)谶M(jìn)入托管環(huán)境之前所具有的優(yōu)先級(jí)。用戶可以使用Thread.Priority屬性獲取或設(shè)置任何線程的優(yōu)先級(jí)。
線程是根據(jù)其優(yōu)先級(jí)而調(diào)度執(zhí)行的。即使線程正在運(yùn)行庫中執(zhí)行,所有線程都是由操作系統(tǒng)分配處理器時(shí)間片的。用于確定線程執(zhí)行順序的調(diào)度算法的詳細(xì)情況隨每個(gè)操作系統(tǒng)的不同而不同。在某些操作系統(tǒng)下,具有最高優(yōu)先級(jí)(相對(duì)于可執(zhí)行線程而言)的線程經(jīng)過調(diào)度后總是首先運(yùn)行。如果具有相同優(yōu)先級(jí)的多個(gè)線程都可用,則計(jì)劃程序?qū)⒈闅v處于該優(yōu)先級(jí)的線程,并為每個(gè)線程提供一個(gè)固定的時(shí)間片來執(zhí)行。如果在給定的優(yōu)先級(jí)上不再有可運(yùn)行的線程,則計(jì)劃程序?qū)⒁频较乱粋€(gè)較低的優(yōu)先級(jí)并在該優(yōu)先級(jí)上調(diào)度線程以執(zhí)行。如果具有較高優(yōu)先級(jí)的線程可以運(yùn)行,則具有較低優(yōu)先級(jí)的線程將被搶先,并允許具有較高優(yōu)先級(jí)的線程再次執(zhí)行。除此之外,當(dāng)應(yīng)用程序的用戶界面在前臺(tái)和后臺(tái)之間移動(dòng)時(shí),操作系統(tǒng)還可以動(dòng)態(tài)調(diào)整線程優(yōu)先級(jí)。其他操作系統(tǒng)可以選擇使用不同的調(diào)度算法。
可以為線程分配以下任何一個(gè)優(yōu)先級(jí)值,如下所示。
Highest
AboveNormal
Normal
BelowNormal
Lowest
示例
線程的優(yōu)先級(jí)
下面的示例展示了如何使用優(yōu)先級(jí)。
using System;
using System.Threading;
class Test
{
static void Main()
{
PriorityTest priorityTest = new PriorityTest();
Thread threadOne = new Thread(new ThreadStart(priorityTest.ThreadMethod));
threadOne.Name = "線程1";
Thread threadTwo = new Thread(new ThreadStart(priorityTest.ThreadMethod));
threadTwo.Name = "線程2";
threadTwo.Priority = ThreadPriority.BelowNormal;
threadOne.Start();
threadTwo.Start();
// 線程休眠20s
Thread.Sleep(20000);
priorityTest.LoopSwitch = False;
}
}
class PriorityTest
{
bool loopSwitch;
public PriorityTest()
{
loopSwitch = True;
}
public bool LoopSwitch
{
set{ loopSwitch = value; }
}
public void ThreadMethod()
{
long threadCount = 0;
while(loopSwitch)
{
threadCount++;
}
Console.WriteLine("{0} with {1,11} priority " +
"has a count = {2,13}", Thread.CurrentThread.Name,
Thread.CurrentThread.Priority.ToString(),
threadCount.ToString("N0"));
}
}
完整程序代碼如下:
★ ★★★★Program.cs主程序文件完整程序代碼★★★★★
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace _8_03
{
class Test
{
static void Main(string[] args)
{
PriorityTest priorityTest = new PriorityTest();
Thread threadOne = new Thread(new ThreadStart(priorityTest.ThreadMethod));
threadOne.Name = "線程1";
Thread threadTwo = new Thread(new ThreadStart(priorityTest.ThreadMethod));
threadTwo.Name = "線程2";
threadTwo.Priority = ThreadPriority.BelowNormal;
threadOne.Start();
threadTwo.Start();
// 線程休眠20秒
Thread.Sleep(20000);
priorityTest.LoopSwitch = false;
}
}
class PriorityTest
{
bool loopSwitch;
public PriorityTest()
{
loopSwitch = true;
}
public bool LoopSwitch
{
set { loopSwitch = value; }
}
public void ThreadMethod()
{
long threadCount = 0;
while (loopSwitch)
Tags:網(wǎng)絡(luò)編程 C#教程 責(zé)任編輯:admin
C#教程:線程的優(yōu)先權(quán)(2)
來源:原創(chuàng) 作者:小人物 錄入時(shí)間:2009-09-28
內(nèi)容導(dǎo)讀: { threadCount++; } Console.WriteLine({0} with {1,11} priority + has a count = {2,13}, Thread.CurrentThread.Name, Thread.CurrentThread.Priority.ToString(), threadCount.ToString(N0)); } } }
聯(lián)系客服