程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 多線程系列(1)多線程基礎和Thread

多線程系列(1)多線程基礎和Thread

編輯:C#入門知識

  因為現項目中有用到多線程和並發的知識,所以打算近期補習一下多線程相關的內容。第一篇文章從最基礎的開始,就是如何開啟一個線程,如何啟動線程和阻塞線程等,這篇文章分以下幾點進行總結。

多線程初印象

  首先通過一張圖來了解一下進程Process,應用程序域AppDomain和線程Thread之間的關系。

從圖中可以總結出以下幾點:

多線程的使用場景

  總結起來主要有以下幾個場景:

線程的啟動,掛起和終止

  .net framework為我們提供了Thread類來使用多線程,它在命名空間System.Threading下。

開啟線程:創建一個Thread對象,它分為無參類ThreadStart,有參類ParameterizedThreadStart,傳入參數為Object類型。

前台線程和後台線程:使用Thread.Start()方法啟動的線程默認為前台線程,一般我們將新啟動的線程設置為後台線程,因為這樣我們的主線程就不需要等待前台線程執行完成。

掛起線程:使用Thread.Sleep()方法可將主線程掛起,但是系統無法預計異步線程(新開啟的線程)的運行時間,所以使用Sleep()方法來阻塞主線程並不科學。通常我們使用異步線程的Join()方法來保證主線程在異步線程運行結束後才結束。

終止線程:使用Thread.Abort()方法。

一個簡單的多線程實例

下面使用一個簡單的示例來演示如何使用簡單的多線程,示例代碼如下。

namespace ThreadDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // Thread
            Fish fish = new Fish() { Name="小黃魚" };
            Thread thread1 = new Thread(() =>
            {
                fish.Move();
            });
            thread1.IsBackground = true;
            thread1.Start();

            Fish fish2 = new Fish { Name = "大鲨魚" };
            Thread thread2 = new Thread(() =>
            {
                fish2.Move();
            });
            thread2.IsBackground = true;
            thread2.Start();

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 魚
    /// </summary>
    public class Fish
    {
        public string Name { get; set; }

        public int Score { get; set; }

        public Fish()
        {
        }

        public void Move()
        {
            Console.WriteLine(string.Format("{0}在游來游去...", Name));
        }
    }
}

程序運行的結果為:

下一篇文章我將總結如何使用線程池ThreadPool,歡迎大家繼續關注。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved