亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

細(xì)說多線程(二)—— 線程的基礎(chǔ)知識

發(fā)布時(shí)間:  2012/9/16 6:32:49

目錄

一、線程的定義

二、線程的基礎(chǔ)知識

三、以ThreadStart方式實(shí)現(xiàn)多線程

四、CLR線程池的工作者線程

五、CLR線程池的I/O線程

六、異步 SqlCommand

七、并行編程與PLINQ

八、計(jì)時(shí)器與鎖

 

二、線程的基礎(chǔ)知識

2.1 System.Threading.Thread類

System.Threading.Thread是用于控制線程的基礎(chǔ)類,通過Thread可以控制當(dāng)前應(yīng)用程序域中線程的創(chuàng)建、掛起、停止、銷毀。

它包括以下常用公共屬性:

屬性名稱 說明
CurrentContext 獲取線程正在其中執(zhí)行的當(dāng)前上下文。
CurrentThread 獲取當(dāng)前正在運(yùn)行的線程。

ExecutionContext

獲取一個(gè) ExecutionContext 對象,該對象包含有關(guān)當(dāng)前線程的各種上下文的信息。
IsAlive 獲取一個(gè)值,該值指示當(dāng)前線程的執(zhí)行狀態(tài)。
IsBackground 獲取或設(shè)置一個(gè)值,該值指示某個(gè)線程是否為后臺(tái)線程。
IsThreadPoolThread 獲取一個(gè)值,該值指示線程是否屬于托管線程池。
ManagedThreadId 獲取當(dāng)前托管線程的唯一標(biāo)識符。
Name 獲取或設(shè)置線程的名稱。
Priority 獲取或設(shè)置一個(gè)值,該值指示線程的調(diào)度優(yōu)先級。
ThreadState 獲取一個(gè)值,該值包含當(dāng)前線程的狀態(tài)。


2.1.1 線程的標(biāo)識符

ManagedThreadId 是確認(rèn)線程的唯一標(biāo)識符,程序在大部分情況下都是通過Thread.ManagedThreadId來辨別線程的。而Name是一個(gè)可變值,在默認(rèn)時(shí) 候,Name為一個(gè)空值 Null,開發(fā)人員可以通過程序設(shè)置線程的名稱,但這只是一個(gè)輔助功能。


2.1.2 線程的優(yōu)先級別

.NET為線程設(shè)置了Priority屬性來定義線程執(zhí)行的優(yōu)先級別,里面包含5個(gè)選項(xiàng),其中Normal是默認(rèn)值。除非系統(tǒng)有特殊要求,否則不應(yīng)該隨便設(shè)置線程的優(yōu)先級別。

成員名稱 說明
Lowest 可以將 Thread 安排在具有任何其他優(yōu)先級的線程之后。
BelowNormal 可以將 Thread 安排在具有 Normal 優(yōu)先級的線程之后,在具有 Lowest 優(yōu)先級的線程之前。
Normal 默認(rèn)選擇?梢詫 Thread 安排在具有 AboveNormal 優(yōu)先級的線程之后,在具有 BelowNormal 優(yōu)先級的線程之前
AboveNormal 可以將 Thread 安排在具有 Highest 優(yōu)先級的線程之后,在具有 Normal 優(yōu)先級的線程之前。
Highest 可以將 Thread 安排在具有任何其他優(yōu)先級的線程之前。


2.1.3 線程的狀態(tài)

通過ThreadState可以檢測線程是處于Unstarted、Sleeping、Running 等等狀態(tài),它比 IsAlive 屬性能提供更多的特定信息。

前面說過,一個(gè)應(yīng)用程序域中可能包括多個(gè)上下文,而通過CurrentContext可以獲取線程當(dāng)前的上下文。

CurrentThread是最常用的一個(gè)屬性,它是用于獲取當(dāng)前運(yùn)行的線程。


2.1.4 System.Threading.Thread的方法

Thread 中包括了多個(gè)方法來控制線程的創(chuàng)建、掛起、停止、銷毀,以后來的例子中會(huì)經(jīng)常使用。

方法名稱 說明
Abort()     終止本線程。
GetDomain() 返回當(dāng)前線程正在其中運(yùn)行的當(dāng)前域。
GetDomainId() 返回當(dāng)前線程正在其中運(yùn)行的當(dāng)前域Id。
Interrupt() 中斷處于 WaitSleepJoin 線程狀態(tài)的線程。
Join() 已重載。 阻塞調(diào)用線程,直到某個(gè)線程終止時(shí)為止。
Resume() 繼續(xù)運(yùn)行已掛起的線程。
Start()   執(zhí)行本線程。
Suspend() 掛起當(dāng)前線程,如果當(dāng)前線程已屬于掛起狀態(tài)則此不起作用
Sleep()   把正在運(yùn)行的線程掛起一段時(shí)間。

 

2.1.5 開發(fā)實(shí)例

以下這個(gè)例子,就是通過Thread顯示當(dāng)前線程信息

 1         static void Main(string[] args)
 2         {
 3             Thread thread = Thread.CurrentThread;
 4             thread.Name = "Main Thread";
 5             string threadMessage = string.Format("Thread ID:{0}\n    Current AppDomainId:{1}\n    "+
 6                 "Current ContextId:{2}\n    Thread Name:{3}\n    "+
 7                 "Thread State:{4}\n    Thread Priority:{5}\n",
 8                 thread.ManagedThreadId, Thread.GetDomainID(), Thread.CurrentContext.ContextID,
 9                 thread.Name, thread.ThreadState, thread.Priority);
10             Console.WriteLine(threadMessage);
11             Console.ReadKey();
12         }

 

運(yùn)行結(jié)果

 

2.2  System.Threading 命名空間

在 System.Threading命名空間內(nèi)提供多個(gè)方法來構(gòu)建多線程應(yīng)用程序,其中ThreadPool與Thread是多線程開發(fā)中最常用到的, 在.NET中專門設(shè)定了一個(gè)CLR線程池專門用于管理線程的運(yùn)行,這個(gè)CLR線程池正是通過ThreadPool類來管理。而Thread是管理線程的最 直接方式,下面幾節(jié)將詳細(xì)介紹有關(guān)內(nèi)容。

類     說明
AutoResetEvent 通知正在等待的線程已發(fā)生事件。無法繼承此類。
ExecutionContext 管理當(dāng)前線程的執(zhí)行上下文。無法繼承此類。
Interlocked 為多個(gè)線程共享的變量提供原子操作。
Monitor 提供同步對對象的訪問的機(jī)制。
Mutex 一個(gè)同步基元,也可用于進(jìn)程間同步。
Thread 創(chuàng)建并控制線程,設(shè)置其優(yōu)先級并獲取其狀態(tài)。
ThreadAbortException 在對 Abort 方法進(jìn)行調(diào)用時(shí)引發(fā)的異常。無法繼承此類。
ThreadPool 提供一個(gè)線程池,該線程池可用于發(fā)送工作項(xiàng)、處理異步 I/O、代表其他線程等待以及處理計(jì)時(shí)器。
Timeout 包含用于指定無限長的時(shí)間的常數(shù)。無法繼承此類。
Timer 提供以指定的時(shí)間間隔執(zhí)行方法的機(jī)制。無法繼承此類。
WaitHandle 封裝等待對共享資源的獨(dú)占訪問的操作系統(tǒng)特定的對象。


在System.Threading中的包含了下表中的多個(gè)常用委托,其中ThreadStart、ParameterizedThreadStart是最常用到的委托。
由ThreadStart生成的線程是最直接的方式,但由ThreadStart所生成并不受線程池管理。
而ParameterizedThreadStart是為異步觸發(fā)帶參數(shù)的方法而設(shè)的,在下一節(jié)將為大家逐一細(xì)說。

委托 說明
ContextCallback 表示要在新上下文中調(diào)用的方法。
ParameterizedThreadStart 表示在 Thread 上執(zhí)行的方法。
ThreadExceptionEventHandler 表示將要處理 Application 的 ThreadException 事件的方法。
ThreadStart 表示在 Thread 上執(zhí)行的方法。
TimerCallback 表示處理來自 Timer 的調(diào)用的方法。
WaitCallback 表示線程池線程要執(zhí)行的回調(diào)方法。
WaitOrTimerCallback 表示當(dāng) WaitHandle 超時(shí)或終止時(shí)要調(diào)用的方法。

 

2.3 線程的管理方式

通 過ThreadStart來創(chuàng)建一個(gè)新線程是最直接的方法,但這樣創(chuàng)建出來的線程比較難管理,如果創(chuàng)建過多的線程反而會(huì)讓系統(tǒng)的性能下載。有見及 此,.NET為線程管理專門設(shè)置了一個(gè)CLR線程池,使用CLR線程池系統(tǒng)可以更合理地管理線程的使用。所有請求的服務(wù)都能運(yùn)行于線程池中,當(dāng)運(yùn)行結(jié)束時(shí) 線程便會(huì)回歸到線程池。通過設(shè)置,能控制線程池的最大線程數(shù)量,在請求超出線程最大值時(shí),線程池能按照操作的優(yōu)先級別來執(zhí)行,讓部分操作處于等待狀態(tài),待 有線程回歸時(shí)再執(zhí)行操作。

基礎(chǔ)知識就為大家介紹到這里,下面將詳細(xì)介紹多線程的開發(fā)。
 

億恩-天使(QQ:530997) 電話 037160135991 服務(wù)器租用,托管歡迎咨詢。


本文出自:億恩科技【www.1tcdy.com】

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線