C#線程(一)

來源:互聯網
上載者:User

標籤:運行   blog   簡介   starting   作業系統   優先   管理   reads   對象   

簡介

過去普通電腦只有計算單元,卻不能同時執行多個任務。然而作業系統卻已經可以同時運行多個應用程式,即實現了多任務的概念。為了防止一個應用程式控制CPU而導致其他應用程式和作業系統本身永遠被掛起這一可能情況,作業系統不得不使用某種方式 將物理計算單元分割為一些虛擬進程,並給予每個程式一定量的計算能力。此外,作業系統必須始終能夠優先訪問CPU,並能調整不同程式訪問CPU的優先順序。線程正是這一概念的實現。可以認為線程是一個虛擬進程,用於獨立運行一個特定的程式。 (請記住線程會消耗大量的作業系統資源。多個線程共用一個物理處理器將導致作業系統忙於管理這些線程,而無法運行程式。)

接下來建立一個控制台應用程式

 class Program         {         static void Main(string[] args)        {         Thread t = new Thread(PrintNumbers);            t.Start();            PrintNumbers();            Console.ReadKey();        }         static void PrintNumbers() {            Console.WriteLine("Starting...");            for (int i = 1; i < 10; i++)            {                Console.WriteLine(i);            }         }}     
結果兩組範圍為1到10的數字會隨機交叉輸出。這說明了printnumbers方法同時運行在主線程和另一個線程中。
        static void DoNothing() {            Thread.Sleep(TimeSpan.FromSeconds(2));        }        static void PrintNumbersWithStatus()        {            Console.WriteLine("Starting...");            Console.WriteLine(Thread.CurrentThread.ThreadState.ToString());            for (int i = 1; i < 10; i++) {            Thread.Sleep(TimeSpan.FromSeconds(2));            Console.WriteLine(i);            }        }    

在main方法中加入以下程式碼片段

            Console.WriteLine("Starting program...");            Thread t = new Thread(PrintNumbersWithStatus);            Thread t2 = new Thread(DoNothing);            Console.WriteLine(t.ThreadState.ToString());            t2.Start();            t.Start();            for (int i = 1; i < 30; i++) {                Console.WriteLine(t.ThreadState.ToString());            }            Thread.Sleep(TimeSpan.FromSeconds(6));            t.Abort();            Console.WriteLine("A thread has been aborted");            Console.WriteLine(t.ThreadState.ToString());            Console.WriteLine(t2.ThreadState.ToString());     
工作原理 當主程式啟動時定義了兩個不同的線程。一個將被終止,另一個則會成功完成運行。線程狀態位於Thread對象的ThreadState屬性中。ThreadState屬性是一個C#枚舉對象。剛開始線程狀態為ThreadState.Unstarted。然後我們啟動線程,並估計在一個周期30次迭代的區間中,線程狀態會從ThreadState.Running變為ThreadState.WaitSleepJoin。 如果實際情況與以上不符,請增加迭代次數,終止第一個線程後,會看到現在該線程狀態為ThreadState.Aborted。程式也有可能會列印出ThreadState.AbortRequested狀態。這充分說明了同步兩個線程的複雜性。請記住不要在程式中使用線程終止。我在這裡使用他只是為了展示相應的線程狀態。最後可以看到第二個線程t2成功完成並且狀態為ThreadState.Stopped。另外還有一些其他的線程狀態,但是要麼已經被棄用,要麼沒有我們實驗過的幾種狀態有用。

C#線程(一)

聯繫我們

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