c#的ThreadPool使用筆記(一)

來源:互聯網
上載者:User

摘要:
系列文章,從一個基本的代碼說起,逐步探索 ThreadPool 的奧妙。

首先,看看線程池的樣子:

從看出,線程池維護1個至n個線程,作業系統從請求隊列中提取請求分配個線程池中的適合線程處理。

先寫下如下的代碼:

using System;
using System.Threading;

public class ThreadBase
{
    public static void Main ( ) {

        System.Threading.WaitCallback waitCallback = new WaitCallback ( MyThreadWork );

        ThreadPool.QueueUserWorkItem ( waitCallback, "第一個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第二個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第三個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第四個線程" );
        Console.ReadLine ( );
    }

    public static void MyThreadWork ( object state ) {
        Console.WriteLine ( "線程現在開始啟動…… {0}",(string)state );
        Thread.Sleep ( 10000 );
        Console.WriteLine ( "運行結束…… {0}",( string ) state );
    }
}

分析上面的代碼:
一、首先定義了一個 System.Threading.WaitCallback 對象 waitCallback。
WaitCallback 是一個委託,表示線程池線程要執行的回調方法,它的原型如下:[ComVisibleAttribute(true)] 
public delegate void WaitCallback (
    Object state
)

1、這裡有一個 Callback 機制的問題,所謂的Callback 簡單的理解就是由作業系統調用的函數,我們自己寫的程式不需要調用。就像有個修理工到家裡搞修理,你只需要告訴他鉗子、螺絲刀、膠布等修理工具在什麼地方就行,而不要管他在什麼時候、在什麼地方怎樣使用這些修理工具。
2、WaitCallback 的參數" Object state",這個參數包含回調方法要使用的資訊的對象。在接下來的情況中我再說。
既然 WaitCallback 委託的原型如此,那麼我們就申明一個跟它的樣子差不多的函數,這個函數就是要線程做的事情。public static  void MyThreadWork ( object state )

這裡函數中多了一個 "static",這是因為Main的關係(更大一點就是因為C#語言機制的問題),如果WaitCallback 的對象不是在靜態(static)方法中,這個static 是不需要的。

二、接著就是要執行的方法放入線程池中,以便作業系統執行。
我這裡放置了四個方法要作業系統執行:

        ThreadPool.QueueUserWorkItem ( waitCallback, "第一個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第二個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第三個線程" );
        ThreadPool.QueueUserWorkItem ( waitCallback, "第四個線程" );

這裡,我放置到線程池中的操作是一樣的,當然也可以不一樣,接下來說。

三、最後阻塞主線程,等待線程池中的線程執行 Console.ReadLine ( );

如果忽略掉這個代碼,則有可能看不到任何輸出

好了,這是主線程做的事情了,接下來看看線程池中的線程做的事情。
這個很簡單,就是將線程的參數輸出,然後線程睡眠(sleep)一段時間,最後輸出線程結束的資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.