執行緒系列03,多執行緒共享資料,多執行緒不共享資料

2022-01-19 01:02:20 字數 1820 閱讀 3814

多執行緒程式設計,有時希望每個執行緒的資料相互隔離互不影響,有時卻希望執行緒間能共享資料,並保持同步。本篇體驗多執行緒共享和不共享資料。

□ 多執行緒不共享資料

對於多執行緒,clr到底是怎樣為它們分配記憶體棧空間呢?是"乙個蘿蔔乙個坑",每個執行緒都有自己的棧空間;還是"大樹底下好乘涼",所有的執行緒共享同乙個棧空間?

我們讓2個執行緒執行相同的靜態方法,用到相同的變數,通過列印變數來求證多執行緒棧空間的分配情況。

雖然2個執行緒交叉執行,但都說了4次的hello。說明clr為2個執行緒都分配了棧空間,變數i在各自的棧空間中相互不受影響。

□ 多執行緒共享資料

執行緒間是需要相互合作的,多個執行緒如何共享資料呢?

※ 共享例項變數

讓2個執行緒執行同乙個例項方法,看看是否可以共享物件例項的公共字段。

可見,2個執行緒共享了program例項的公共字段。

另外,關於執行緒間共享資料,乙個繞不開的話題是:如何避免資料不同步?使用lock語句塊可以解決這個問題,在同一時刻只允許有乙個執行緒進入方法內部。這樣的做法也叫」執行緒安全」。

class program
void printvariable()
}
}
當乙個執行緒在lock語句塊執行,另乙個執行緒等待,等待的這個執行緒在那刻不消耗cpu。    

※ 共享靜態字段

總結:

○ clr會給每個執行緒分配記憶體棧空間,棧中的變數互不影響

○ 多執行緒可以共享物件例項的公共成員和類的靜態字段

○ 執行緒間共享資料需要考慮"執行緒安全",使用lock語句塊可保證"執行緒安全"

執行緒系列包括:執行緒系列09,執行緒的等待、通知,以及手動控制線程數量

java多執行緒系列03

建立執行緒的兩種方式 1繼承thread類,步驟 1定義類繼承thread 2複寫thread類中的run方法,目的 將自定義的 儲存在run方法,讓執行緒執行 3呼叫該執行緒的start方法,該方法兩個作用 啟動執行緒,呼叫run方法。此時執行緒處於runnable狀態 從而使執行緒啟動去同其他執...

多執行緒 資料共享

package thread 需求 簡單的買票程式 需多個視窗同時買票,實現資料共享 實現方式和繼承方式有什麼區別?實現方式避免了單繼承的侷限性。具體步驟 1.定義類實現runnable介面 2.覆蓋runnable介面中的run方法 3.通過thread類建立執行緒物件 4.將runnable介面...

C 多執行緒共享資料

在多執行緒程式設計中,我們經常要使用資料共享.c 中是如何實現的呢?很簡單,只要把你要共享的資料設定成靜態的就可以了.關鍵字static 如下 static queue q1 new queue static int b 0 在這裡我定義了乙個整形變數b和佇列q1.接下去就可以建立多執行緒 了.如下...