黑馬程式設計師 多執行緒

2021-06-15 04:17:41 字數 3030 閱讀 6726

------- windows phone 7手機開發、.net培訓、期待與您交流! -------

一、          程序與執行緒

l  程序:乙個執行的程式就是乙個程序,程序包括執行中的程式和程式需要用到的記憶體和系統資源;

乙個程序至少有乙個執行緒,乙個程序中多個執行緒可以併發執行

l  執行緒:程式中的乙個執行流,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但**去是共享的,即不同的執行緒可以執行同樣的函式。

l  多執行緒:指程式中包含多個執行流,即在乙個程式中可以執行多個不同的執行緒來執行不同的任務。

l  執行緒的「併發」:cpu某一時刻只能執行乙個執行緒,但是cpu切換執行執行緒的時間太短,看起來所有執行緒在同時執行;

二、          .net中如何實現多執行緒?

l  執行緒肯定要執行一段**,所以要產生乙個執行緒,必須為這個執行緒寫乙個方法,方法中的**就是該執行緒執行時執行的**。

l  執行緒啟動時,通過委託呼叫方法。(委託的好處)

執行緒啟動時,呼叫傳過來的委託的例項,委託就會呼叫相應的方法,實現執行緒執行方法。

三、          .net中產生乙個執行緒的4步驟:

1.     編寫該執行緒要執行的方法;

2.     引用system.threading命名空間;

3.     例項化thread類,並傳入乙個指向執行緒要執行方法的委託(這時執行緒已經產生,但是還沒有執行);

4.     呼叫thread例項的start方法,標記該執行緒可以被cpu執行了,但是具體執行時間由cpu決定。

四、          前台執行緒和後台執行緒

前台執行緒:只有當所有的前台執行緒都關閉後,程式才真正關閉;

後台執行緒:只要所有的前台執行緒都關閉了,後台執行緒將自動關閉。

新建執行緒預設是前台執行緒。

設定執行緒為後台執行緒:設定執行緒例項的屬性isbackground=true。

五、          聊天室程式和web伺服器會用到多執行緒。

六、          為什麼要用多執行緒

1.可以讓計算機「同時」做多件事情,節約時間;

2.後台執行另一段**,前台介面也不會造成卡頓,提高執行效率;

七、          單執行緒帶來的問題

單執行緒執行**時,程式不能再響應其他操作,如果這段**比較耗時,那麼程式介面就會無響應,只能等待。

八、建立執行緒的例項

void counttime()

//空迴圈9億次

timespan ts = datetime.now.subtract(begin);

messagebox.show("迴圈完畢。用時:" + ts.totalmilliseconds.tostring());

}private void btnmulthread_click(object sender, eventargs e)

thread類的建構函式:public thread(threadstart start)
threadstart 是指向乙個無參方法的委託。
九、          執行緒的方法重入問題

所謂方法重入,是乙個有關多執行緒程式設計的概念。程式中多個執行緒同時執行時,就可能發生同乙個方法被多個執行緒呼叫的情況。當這個方法中存在一些非執行緒安全的**時,方法注入就會導致資料不一致的情況,這是非常嚴重的bug。

執行異常:「執行緒間操作無效

: 從不是建立控制項「

txtnum

」的執行緒訪問它。」

分析: txtnum是ui執行緒建立的,其他執行緒預設不能再訪問它。如果想在其他執行緒中訪問該控制項,設定「textbox.checkforillegalcrossthreadcalls = false 」。

十、          thread類的重要成員

start()啟動執行緒;

abort()終止執行緒;

thread.sleep(1),靜態方法,使當前執行緒停止執行一段時間;

name,執行緒名;

thread.currentthread:靜態成員,獲得當前執行緒的引用;

十一、   執行緒執行帶引數的方法

1.執行帶單個引數的方法

委託parameterizedthreadstart指向帶引數的方法,且引數型別為object。

**示例:

//執行緒執行帶單個引數的方法

void showname(object name)

else

}//-----------------執行緒執行帶單個引數的方法-----------------

private void btnthreadwithoneparam_click(object sender, eventargs e)

2. 執行緒執行帶多個引數的方法
委託parameterizedthreadstart指向方法的引數為object型別,因為object是所有型別的父類,所以可以通過傳入陣列或者泛型,來實現執行緒執行帶多個引數的方法。

//帶多個引數的方法

void showname2(object li)}}

//-----------------執行緒執行帶多個引數的方法-----------------

private void btnthreadwithmultiparams_click(object sender, eventargs e)

);}

------- 

windows phone 7手機開發

、.net培訓

、期待與您交流! -------

黑馬程式設計師 多執行緒

asp.net android io開發 net培訓 期待與您交流!執行緒與程序的關係 乙個程式就相當於乙個程序 乙個程序至少有乙個執行緒 同乙個程序中的多個執行緒之間可以 併發 執行 執行緒 1 乙個執行緒一次只能完成乙個任務 2 多執行緒方法重入 cpu是不斷的在多個執行緒之間來回切換執行的 3...

黑馬程式設計師 多執行緒

asp.net android ios開發 net培訓 期待與您交流!多執行緒為什麼要用多執行緒?1 讓計算機 同時 做多件事情,節約時間。2 後台執行程式,提高程式的執行效率,也不會使主介面出現無響應的情況。3 多執行緒可以讓乙個程式 同時 處理多個事情。4 計算機cpu 大部分時間處於空閒狀態,...

黑馬程式設計師 多執行緒

asp.net android ios開發 net培訓 期待與您交流!了解多執行緒 了解多執行緒,先了解概念 什麼是程序。程序 正在執行的應用程式。那麼什麼是執行緒呢?執行緒 應用程式的執行單元,執行路徑。什麼是單執行緒?單執行緒 顧名思義,乙個應用程式在執行的過程中只有一條執行路徑。那麼什麼是多執...