執行緒安全及執行緒之間資訊的傳遞

2021-09-24 17:25:43 字數 974 閱讀 4686

執行緒安全

adt或方法在多執行緒中要正確執行

不違反spec、保持ri

不需要在spec中進行執行緒安全限制

保護執行緒安全地方法

限制資料共享

執行緒之間不共享mutable型別資料

避免使用全域性變數

共享不可變資料

使用不可變型別資料和不可變引用

允許全域性變數但必須是immutable

共享執行緒安全地可變資料

檢視jdk文件,文件中明確指明是否執行緒安全

list、map、set類都是執行緒不安全的

可以使用同步包裝器,如:

collections.synchronizedlist(new arraylist<>())

collections.synchronizedmap(new hashmap<>())

同步機制:加鎖

每個物件都有相關聯的鎖 object lock =new object()

擁有鎖的執行緒可以獨佔式地執行該部分**

synchronized (lock)

若想要互斥則要用同一把鎖,同乙個時刻只有乙個執行緒可以訪問該段**

synchronized還可修飾方法、靜態方法

會給程式效能帶來極大影響,不建議使用

死鎖

多個程式競爭lock,相互等待對方釋放鎖

多見於巢狀鎖的情況:

執行緒中資訊傳遞的模式

所有的執行緒共享乙個被lock保護的佇列

傳送者向佇列中加入資料或請求,接受者送佇列中移出資料或請求

佇列可以儲存任意型別的物件,物件必須是不可變型別以防止共享記憶體

佇列處理請求時,執行緒仍在繼續執行

JMETER 執行緒之間傳遞變數

首先我們不能把登入模組和交易的資訊寫在乙個執行緒組裡面,僅一次控制器,這個配件只是在乙個執行緒裡面生效 我們併發10個執行緒,迴圈5次,那麼就代表需要登入10次,和迴圈次數無關,但是這樣就達不到我們只登入一次的目的,那麼我們需要另闢思路,把登入模組放到乙個執行緒組裡面,然後把獲取登入的 token ...

Qt多執行緒之間的訊號傳遞

qt 多執行緒的訊號傳遞 qobject connect const qobject sender,const char signal,const qobject receiver,const char method,qt connectiontype type autoconnection 這個函...

C 參考 主線程和子執行緒之間的引數傳遞

幾個程序在大多數情況下要包含很多的子執行緒,那麼他們之間免不了的要互相傳遞很多的引數,那麼引數怎麼傳遞的呢?第一種方法 thraed類有乙個帶引數的委託型別的過載形式,這個委託的定義如下 delegate void parameterizedthreadstart object obj 這個thre...