激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

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

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

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

        目錄

        一、線程的定義

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

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

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

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

        六、異步 SqlCommand

        七、并行編程與PLINQ

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

         

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

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


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

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


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

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

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


        2.1.3 線程的狀態(tài)

        通過ThreadState可以檢測(cè)線程是處于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 提供同步對(duì)對(duì)象的訪問的機(jī)制。
        Mutex 一個(gè)同步基元,也可用于進(jìn)程間同步。
        Thread 創(chuàng)建并控制線程,設(shè)置其優(yōu)先級(jí)并獲取其狀態(tài)。
        ThreadAbortException 在對(duì) Abort 方法進(jìn)行調(diào)用時(shí)引發(fā)的異常。無法繼承此類。
        ThreadPool 提供一個(gè)線程池,該線程池可用于發(fā)送工作項(xiàng)、處理異步 I/O、代表其他線程等待以及處理計(jì)時(shí)器。
        Timeout 包含用于指定無限長的時(shí)間的常數(shù)。無法繼承此類。
        Timer 提供以指定的時(shí)間間隔執(zhí)行方法的機(jī)制。無法繼承此類。
        WaitHandle 封裝等待對(duì)共享資源的獨(dú)占訪問的操作系統(tǒng)特定的對(duì)象。


        在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)可以更合理地管理線程的使用。所有請(qǐng)求的服務(wù)都能運(yùn)行于線程池中,當(dāng)運(yùn)行結(jié)束時(shí) 線程便會(huì)回歸到線程池。通過設(shè)置,能控制線程池的最大線程數(shù)量,在請(qǐng)求超出線程最大值時(shí),線程池能按照操作的優(yōu)先級(jí)別來執(zhí)行,讓部分操作處于等待狀態(tài),待 有線程回歸時(shí)再執(zhí)行操作。

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

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


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

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

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

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