多線程相關概念

GPS平臺、網站建設、軟件開發、系統運維,找森大網絡科技!
http://cnsendnet.taobao.com
來自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=431php

一、當前線程
Thread.CurrentThread
二、線程控制
• Start():啓動線程
• Sleep(int):靜態方法,暫停當前線程指定的毫秒數
• Abort():一般使用該方法來終止一個線程,不可恢復的,再次執行Start會報錯
• Suspend():該方法並不終止未完成的線程,它僅僅掛起線程,之後還可恢復
• Resume():恢復被Suspend()方法掛起的線程的執行
• Join():使主線程等待,直到當前線程結束
三、ThreadState屬性
Thread.ThreadState這個屬性表明了線程運行時狀態:
• Aborted:線程已中止
• AbortRequested:線程的Thread.Abort()方法已被調用,可是線程還未中止
• Background:線程在後臺執行,與屬性Thread.IsBackground有關
• Running:線程正在正常運行
• Stopped:線程已經被中止
• StopRequested:線程正在被要求中止
• Suspended:線程已經被掛起(此狀態下,能夠經過調用Resume()方法從新運行)
• SuspendRequested:線程正在要求被掛起,可是將來得及響應
• Unstarted:未調用Thread.Start()開始線程的運行
• WaitSleepJoin:線程由於調用了Wait(),Sleep()或Join()等方法處於封鎖狀態
四、優先級
能夠設定5個不一樣的優先級,由高到低分別是Highest,AboveNormal,Normal,BelowNormal,Lowest,在建立線程時若是不指定優先級,那麼系統默認爲ThreadPriority.Normal。
//設定優先級爲最低
myThread.Priority=ThreadPriority.Lowest;
五、多線程的例子
線程入口經過ThreadStart代理來提供的,能夠把ThreadStart理解爲一個函數指針,指向線程要執行的函數,當調用Thread.Start()方法後,線程就開始執行ThreadStart所指向的函數。c#

class Program 
    { 
        static void Main(string[] args) 
        { 
            TestClass test = new TestClass(); 
            Thread th1 = new Thread(new ThreadStart(test.ThreadMethod)); 
            th1.Start(); 

            //主線程暫停4ms,CPU執行線程th1 
            Thread.Sleep(4); 

            th1.Abort(); 
            th1.Join(); 
            Console.ReadLine(); 
        } 
    } 

    public class TestClass 
    { 
        public void ThreadMethod() 
        { 
            while (true) 
            { 
                Console.WriteLine("線程1正在運行"); 
            } 
        } 
    }

六、線程死鎖
爲了防止資源被同時使用,c#中使用lock和Monitor來鎖定資源,處理完畢後再釋放資源。其實在C#編譯器編譯lock語句時,lock編譯成了調用Monitor類,因此徹底可使用Monitor替代lock。使用這種方法極可能就會致使死鎖的狀況。
兩個線程搶佔兩個資源,線程1搶到了資源A,還須要資源B;線程2搶到了資源B,還須要資源A;結果就死鎖了。
解決死鎖問題,可使用Monitor.TryEntry,設置超時時間網絡

if(Monitor.TryEntry(lockObj, 1000))  { 
     try{ 

     } 
     finally{ 
         Monitor.Exit(lockObj); 
     } 
} 
else { 
     // 超時後的處理代碼 
}

GPS平臺、網站建設、軟件開發、系統運維,找森大網絡科技!
http://cnsendnet.taobao.com
來自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=431多線程

相關文章
相關標籤/搜索