多線程編程實戰(一)

來源:互聯網
上載者:User

多線程編程實戰(一)

為了快速處理大量的任務,多線程編程必不可少,所以最近也開始研究多線程方面的東西了。網上有不少資料可以參考,自己從執行個體入手,總結了一些東西,把它記錄下來,方便自己日後查閱,也方便後來人。現在的程式設計語言,入門第一課,都是寫一個Hello Word的程式。本文類似,雖說不是hello Word,但也是從最簡單的多線程執行個體入手。

我們最常用到多線程的情境一般是這樣的,有一個很大的任務需要處理,而這個大的任務有可以細分為許多的小任務(子任務),這些小任務可以採用多線程機制,並存執行。而一般來說,這個大任務所包含的小任務的個數可能不是太確定。

根據以上情境,我們對其進行歸納:

1. 一個大任務,內部包含了數量不定的子任務

2. 需要對子任務進行多執行緒

OK, 下面我們開始著手用C#實現對此執行個體的多線程實現。我的解決方案是:

1. 對象化大任務,在初始化大任務的執行個體(Instance)時,初始化(確定)子任務

2. 採用多線程,調用(Invoke)大任務的執行個體(Instance)中定義的處理子任務的方法

3. 多執行緒子任務時,定義一個全域的標誌,記錄但前處理到了哪一個,保證不重複處理子任務;

基於此方案,我們的“大任務”類如下:

外部多線程實現如下:

在Console模式下,其結果顯示如下:

由此可見,線程3、4、5、6共4個線程一起處理了這些子任務。代碼不是很複雜,只做簡單說明:

1. 預設的命名空間為System.Threading, 線程相關的東西都在這個namespace下;

2. new Random((int)DateTime.Now.Ticks).Next(30, 50):初始化一個隨機數的執行個體(instance),然後生產一個在30到50之間的隨機數。這裡的目的是假設我們在初始化任務執行個體時,不確定子任務的個數。後面還有new Random((int)DateTime.Now.Ticks).Next(100, 300),目的是架設處理子任務的時間在100到300毫秒之間不定

3. Thread th = new Thread(new ThreadStart(tester.TestOutput));
th.Start(); 這兩句可是線程編程的核心,即初始化一個線程執行個體,然後開始執行!

4. Thread.CurrentThread.GetHashCode():這個可以返回線程的一個雜湊值(HashCode),此例中沒有實際意義,只用於區分不同的線程

5. private int flag = 0:作為一個標記使用,記錄但前執行到那個子任務了。各個子線程均能夠訪問到。

6. public int MaxOutPut:記錄總的任務數。

Console.Write(“Hello Word”) J 一個簡單的多線程執行個體就是這麼easy,當然,這隻是最簡單、最初步的一個執行個體,還有很多需要注意、最佳化的東西,也有一些bug,我們下文接著說。

..待續..

聯繫我們

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