多執行緒共享物件

2021-08-20 01:34:05 字數 751 閱讀 9014

鎖不僅僅是關於同步和互斥,也是關於記憶體可見的,為了保證執行緒能看到共享,變數的最新值,讀取和寫入執行緒都必須使用公共的鎖進行同步

volatile變數:它確保對乙個變數的更新和可預見的方式告訴其他執行緒,被宣告的變數在執行時會被監視,它是共享的,所以讀取乙個volatile型別的變數,會返回某個執行緒寫入的最新值.訪問這個變數不會加鎖,不會引起阻塞

只又當volatile變數能夠簡化實現和同步策略驗證是才使用它,比如他所應用的物件狀態的可見性,或者標識重要的生命週期事件

加鎖可以保證可見性和原子性,volatile變數只能保證可見性

volatile滿足什麼條件才能使用?

寫入變數時不依賴變數的當前值,或者確保只有單一的執行緒修改變數的值

變數不需要與其他的狀態變數共同參與不變約束

而且訪問變數時,沒有其他的原因需要加鎖

如果有變數需要全域性共享,則可用用threadlocal型別保證執行緒安全。

不可變的物件永遠都是執行緒安全的。

變數建立後不會被修改,所有域都是final型別的並且建立期間沒有發生this引用的逸出

hasttable,synchronizedmap,concurrentmap從map獲取任意執行緒

vectorcopyonwritearraylist,copyonwritearrayset,synchronizedlist,syschronizedset可以從容器中獲取他的任意執行緒

blockingqueue或者concurrentlinkedqueue可以從佇列安全發布

多執行緒共享變數 多執行緒共享全域性變數

1.多執行緒的執行順序是無序的 像2個人賽跑,乙個先跑乙個後跑,但根據每個人跑的速度不一樣,跑一半,二者可能跑在一起去了。2.又因為多執行緒是共享乙個全域性變數的,就導致資料容易被弄髒 假如老闆讓兩個員工寫兩個主題ppt,若這兩個人沒商量好,都做了同乙個主題的ppt,導致不但速度很慢,且這個ppt有...

多執行緒間共享物件和資料方式

一 若每個執行緒執行的 相同,可以用同乙個runnable物件,runnable裡面有共享的物件和資料,例如賣票系統,5個執行緒共同賣100張票 public class threadtest2 class shareticket implements runnable 二 若每個執行緒執行的 不同...

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

多執行緒程式設計,有時希望每個執行緒的資料相互隔離互不影響,有時卻希望執行緒間能共享資料,並保持同步。本篇體驗多執行緒共享和不共享資料。多執行緒不共享資料 對於多執行緒,clr到底是怎樣為它們分配記憶體棧空間呢?是 乙個蘿蔔乙個坑 每個執行緒都有自己的棧空間 還是 大樹底下好乘涼 所有的執行緒共享同...