亚洲Aⅴ无码Av红楼在线观看_国产午夜福利涩爱AⅤ_国产sm调教一区二区三区_精品人妻一区二区三区不卡毛片

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

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

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

目錄

一、線程的定義

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

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

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

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

六、異步 SqlCommand

七、并行編程與PLINQ

八、計時器與鎖

 

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

2.1 System.Threading.Thread類

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

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

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

ExecutionContext

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


2.1.1 線程的標識符

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


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

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

成員名稱 說明
Lowest 可以將 Thread 安排在具有任何其他優(yōu)先級的線程之后。
BelowNormal 可以將 Thread 安排在具有 Normal 優(yōu)先級的線程之后,在具有 Lowest 優(yōu)先級的線程之前。
Normal 默認選擇?梢詫 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 屬性能提供更多的特定信息。

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

CurrentThread是最常用的一個屬性,它是用于獲取當前運行的線程。


2.1.4 System.Threading.Thread的方法

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

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

 

2.1.5 開發(fā)實例

以下這個例子,就是通過Thread顯示當前線程信息

 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         }

 

運行結(jié)果

 

2.2  System.Threading 命名空間

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

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


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

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

 

2.3 線程的管理方式

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

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

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


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

服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!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ù)器/云主機 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務(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小時客服服務(wù)熱線