自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

總結(jié)C#多線程的點(diǎn)點(diǎn)滴滴

開(kāi)發(fā) 后端
本文從C#多線程基本概念、多線程的優(yōu)劣、控制線程的類和方法、如何操縱一個(gè)線程等方面總結(jié)了總結(jié)C#多線程的相關(guān)知識(shí)。

一、C#多線程相關(guān)的基本概念

     進(jìn)程:當(dāng)一個(gè)程序開(kāi)始運(yùn)行時(shí),它就是一個(gè)進(jìn)程,進(jìn)程包括運(yùn)行中的程序和程序所使用到的內(nèi)存和系統(tǒng)資源。而一個(gè)進(jìn)程又是由多個(gè)線程所組成的。

     線程:線程是程序中的一個(gè)執(zhí)行流,每個(gè)線程都有自己的專有寄存器(棧指針、程序計(jì)數(shù)器等),但代碼區(qū)是共享的,即不同的線程可以執(zhí)行同樣的函數(shù)。

     多線程:多線程是指程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程來(lái)執(zhí)行不同的任務(wù),也就是說(shuō)允許單個(gè)程序創(chuàng)建多個(gè)并行執(zhí)行的線程來(lái)完成各自的任務(wù)。

     靜態(tài)屬性:這個(gè)類所有對(duì)象所公有的屬性,不管你創(chuàng)建了多少個(gè)這個(gè)類的實(shí)例,但是類的靜態(tài)屬性在內(nèi)存中只有一個(gè)。

二、C#多線程的優(yōu)劣

     優(yōu)點(diǎn):可以提高CPU的利用率。在多線程程序中,一個(gè)線程必須等待的時(shí)候,CPU可以運(yùn)行其它的線程而不是等待,這樣就大大提高了程序的效率。

     缺點(diǎn):線程也是程序,所以線程需要占用內(nèi)存,線程越多占用內(nèi)存也越多;

           多線程需要協(xié)調(diào)和管理,所以需要CPU時(shí)間跟蹤線程;

           線程之間對(duì)共享資源的訪問(wèn)會(huì)相互影響,必須解決競(jìng)用共享資源的問(wèn)題;

           線程太多會(huì)導(dǎo)致控制太復(fù)雜,最終可能造成很多Bug;

三、控制線程的類和方法

     類:using System.Threading;  Thread類

     Thread類的方法:Start():?jiǎn)?dòng)線程;

                     Sleep(int):靜態(tài)方法,暫停當(dāng)前線程指定的毫秒數(shù);

                     Abort():通常使用該方法來(lái)終止一個(gè)線程;

                     Suspend():該方法并不終止未完成的線程,它僅僅掛起線程,以后還可恢復(fù);

                     Resume():恢復(fù)被Suspend()方法掛起的線程的執(zhí)行。

四、如何操縱一個(gè)線程

  1. using System;  
  2. using System.Threading;   
  3. namespace ThreadTest  
  4. {      
  5.      public class Alpha  
  6.      {          
  7.          public void Beta()      
  8.          {          
  9.               while (true)              
  10.               {               
  11.                   Console.WriteLine("Alpha.Beta is running in its own thread.");    
  12.               }       
  13.          }     
  14.      }  
  15.      public class Simple  
  16.      {     
  17.          public static int Main()     
  18.          {          
  19.               Console.WriteLine("Thread Start/Stop/Join Sample");   
  20.               Alpha oAlpha = new Alpha();      
  21.               //這里創(chuàng)建一個(gè)線程,使之執(zhí)行Alpha類的Beta()方法     
  22.               Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));    
  23.               oThread.Start(); // 程序運(yùn)行的是Alpha.Beta()方法   
  24.               while (!oThread.IsAlive)       
  25.               Thread.Sleep(1);  //讓主線程停1ms          
  26.               oThread.Abort();  //終止線程oThread         
  27.               oThread.Join();  //使主線程等待,直到oThread線程結(jié)束??梢灾付ㄒ粋€(gè)int型的參數(shù)作為等待的最長(zhǎng)時(shí)間    
  28.               Console.WriteLine();        
  29.               Console.WriteLine("Alpha.Beta has finished");     
  30.               try              
  31.               {             
  32.                   Console.WriteLine("Try to restart the Alpha.Beta thread");      
  33.                   oThread.Start();             
  34.               }           
  35.               catch (ThreadStateException)          
  36.               {          
  37.                   Console.Write("ThreadStateException trying to restart Alpha.Beta. ");  
  38.                   Console.WriteLine("Expected since aborted threads cannot be restarted.");                           Console.ReadLine();     
  39.               }           
  40.               return 0;    
  41.          }     
  42.       }  

五、Thread.ThreadState 屬性

     Aborted:線程已停止;

     AbortRequested:線程的Thread.Abort()方法已被調(diào)用,但是線程還未停止;

     Background:線程在后臺(tái)執(zhí)行,與屬性Thread.IsBackground有關(guān);不妨礙程序的終止

     Running:線程正在正常運(yùn)行;

     Stopped:線程已經(jīng)被停止;

     StopRequested:線程正在被要求停止;

     Suspended:線程已經(jīng)被掛起(此狀態(tài)下,可以通過(guò)調(diào)用Resume()方法重新運(yùn)行);

     SuspendRequested:線程正在要求被掛起,但是未來(lái)得及響應(yīng);

     Unstarted:未調(diào)用Thread.Start()開(kāi)始線程的運(yùn)行;

     WaitSleepJoin:線程因?yàn)檎{(diào)用了Wait(),Sleep()或Join()等方法處于封鎖狀態(tài);

六、C#多線程的優(yōu)先級(jí)

     由高到低分別是Highest,AboveNormal,Normal,BelowNormal,Lowest;系統(tǒng)默認(rèn)為T(mén)hreadPriority.Normal

     指定優(yōu)先級(jí)的代碼:myThread.Priority=ThreadPriority.Lowest;

【編輯推薦】

  1. 學(xué)習(xí)C#接口繼承
  2. 學(xué)習(xí)C#接口編程——顯式實(shí)現(xiàn)C#接口成員
  3. 學(xué)習(xí)C#接口編程——C#接口轉(zhuǎn)換
  4. C#反射訪問(wèn)屬性規(guī)范及示例
  5. C#操作符之IS與AS:安全的強(qiáng)制類型轉(zhuǎn)換
責(zé)任編輯:book05 來(lái)源: csdn
相關(guān)推薦

2011-06-22 11:09:01

QT 菜單 多線程

2011-05-05 13:51:45

LINQ

2011-08-02 14:35:11

IOS應(yīng)用

2010-06-08 17:52:38

IPv6協(xié)議技術(shù)

2012-06-21 09:32:53

程序員

2012-02-15 10:05:02

Linux命令行

2019-05-20 10:15:02

Windows 10Windows XPWindows

2009-11-30 14:23:05

阿爾法路由器GR55

2024-03-06 09:29:13

BEV自動(dòng)駕駛

2010-01-18 14:41:45

交換機(jī)配置經(jīng)驗(yàn)

2012-12-12 14:05:37

手機(jī)打印機(jī)

2013-07-18 09:42:47

創(chuàng)業(yè)總結(jié)

2013-07-17 13:03:19

創(chuàng)業(yè)者創(chuàng)業(yè)總結(jié)

2020-11-19 08:14:07

jQuery

2009-08-12 18:04:44

編寫(xiě)C#多線程

2012-05-18 10:36:20

CC++編程

2013-03-28 09:45:34

iOS學(xué)習(xí)筆記總結(jié)整理

2024-10-21 16:59:37

C#編程多線程

2009-08-26 18:13:55

C#多線程lock
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)