日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程学习3——前台线程和后台线程

發布時間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程学习3——前台线程和后台线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前臺線程和后臺線程

????? 線程默認為前臺線程,這意味著任何前臺線程在運行都會保持程序存活。

????? 后臺線程:只要有一個前臺線程在運行,應用程序的進程就在運行。如果多個前臺線程在運行,而Main()方法結束了,應用程序的進程就是激活的,直到所有前臺線程完成其任務為止。

????? 前臺線程和后臺線程的唯一的區別是— 后臺線程不會阻止進程終止。

????? 在默認情況下,用Thread 類創建的線程都是前臺線程。線程池中的線程總是后臺線程。

????? 在用Thread類創建線程時,可以設置屬性IsBackground,以確定該線程是(false)前臺線程還是(true)后臺線程。

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void myThread()
{

Console.WriteLine(
"新的線程開始輸出消息");
Console.ReadKey();
Thread.Sleep(
4000);//停止4秒中讓主線程可以比NewThread提前結束


Console.WriteLine(
"新的線程結束輸出消息");
Console.ReadKey();

}

static void Main(string[] args)
{
Thread thread
= new Thread(myThread);
thread.Name
= "NewThread";

//IsBackground屬性設置為false時 線程 NewThread是可以在主線程執行完畢后打印出兩條消息的
//IsBackground如果為true,則在主線程結束后,就打印不出第二條消息了 因為主線程(前臺線程)結束了,
后臺線程也就跟著退出了。

thread.IsBackground = false;
thread.Start();

Console.WriteLine(
"主線程已經結束");
}
}
}

前臺線程和后臺線程適合的場合

?????? 通常,后臺線程非常適合于完成后臺任務,應該將被動偵聽活動的線程設置為后臺線程,而將負責發送數據的線程設置為前臺線程,這樣,在所有的數據發送完畢之前該線程不會被終止。

?????? 例如:如果關閉Word應用程序,拼寫檢查器繼續運行器進程就沒有意義了。在應用程序結束時,拼寫檢查器就可以關閉了。

線程的優先級

?????? 在windows上執行的線程在執行了一定時間(一個時間片)后,windows將會進行“調度”,給線程指定優先級,可以影響這個調度。

?????? windows按照優先級的高低選擇程序開始運行,也就是說如果存在一個優先級是25的線程能夠執行,那么windows將不會調用優先級為24的線程。但是windows是一種“搶占式”的操作系

統 (在windows上執行的線程能夠在任何時候被搶占),如果一個具有較高優先級的線程準備好運行,并且當前運行的是較低優先級的線程,windows將迫使較低優先級線程停止運行,開始

運行較高優先級的線程。

?????? 由于windows上線程調用是(籠統的講)通過線程的優先級來實現的,那么如果我們想使我們的程序能夠被盡量多的調度,就需要設置線程的優先級,

? ? ?? 在Thread類中,可以設置Priority屬性,以影響線程的基本優先級。Priority屬性需要一個ThreadPriority枚舉定義的值。 ?????

Highest > AboveNormal >? Normal >? BelowNormal > Lowest

?????? 通常情況下,我們是不需要設置線程的優先級,或者將其設置成Normal優先級。

using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static bool loopSwitch = true;
static void myThread()
{
long threadCount = 0;
//進行加法操作
while (loopSwitch) { threadCount++; }
//顯示結果
Console.WriteLine("{0},優先級:{1}" + "數到:{2}",
Thread.CurrentThread.Name,
Thread.CurrentThread.Priority.ToString(),
threadCount.ToString());
Console.ReadLine();
}

static void Main(string[] args)
{
Thread threadOne
= new Thread(myThread);
threadOne.Name
= "ThreadOne";

Thread threadTwo
= new Thread(myThread);
threadTwo.Name
= "ThreadTwo";
threadTwo.Priority
= ThreadPriority.Lowest;

threadOne.Start();
threadTwo.Start();
Thread.Sleep(
2000);
loopSwitch
= false;
}
}
}

??????? 運行結果:

??????? threadTwo,優先級:Lowest數到:744795888
??????? threadOne
,優先級:Normal數到: 745653704
??????? 很顯然線程優先級高的threadOne數的數要多一些,也就是說它執行的快一些。
??????? 這里還要注意一個問題,線程的優先級還跟平臺有關。不同的操作系統會對線程的調度不同,也就是說你在Windows下設的優先級到其他操作系統下可能一點用都沒有。
??????? 建議不要隨便提高線程的優先級,如果線程優先級過高可能會影響其他線程的執行,從而導致嚴重的、難以預料的、不堪設想的后果。

轉載于:https://www.cnblogs.com/jiajiayuan/archive/2011/05/31/2064059.html

總結

以上是生活随笔為你收集整理的线程学习3——前台线程和后台线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。