C#多線程(三)——ThreadPool的使用

來源:互聯網
上載者:User

1.  應用程式中的線程把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應,這種情況下需要使用ThreadPool。

2.  ThreadPool可以作為一個線程的容器,ThreadPool類也是一個靜態類,你不能也不必要產生它的對象,而且一旦使用該方法線上程池中添加了一個項目,那麼該項目將是沒有辦法取消的。在這裡你無需自己建立線程,只需把你要做的工作寫成函數,然後作為參數傳遞給ThreadPool.QueueUserWorkItem()方法就行了,傳遞的方法就是依靠WaitCallback代理對象,而線程的建立、管理、運行等等工作都是由系統自動完成的,你無須考慮那些複雜的細節問題。

3.  ThreadPool.QueueUserWorkItem(WaitCallback,Object )方法一個重載可以通過傳遞一個object對象給線程,這樣我們在使用的時候就可以將一些重要訊息封裝後傳遞給線程。值得注意的是,傳遞給WaitCallback的參數的方法必須有一個Object的參數,不然會提示:“ThreadRun”的重載均與委託“System.Threading.WaitCallback”不匹配。代碼如下:

static void Main(string[] args)

        {

            //定義一個計數器

            Program p = new Program();

            WaitCallback wc = new WaitCallback(p.ThreadRun);

ThreadPool.QueueUserWorkItem(wc);

        }

        //定義一下線程執行的方法

        public void ThreadRun(Object o)

        {

            //具體處理

}

 

補充一點:Interlocked.Increment(ref int)函數類似於將傳入的int變數放在lock關鍵字範圍內。代碼如下:

lock (this)

            {

               //計數器

                count++;

            }

類似於代碼:Interlocked.Increment(ref count),還有一個遞減的方法Interlocked.Decrement(ref int)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.