什麼是共享資源,一塊資源可能會被多個執行緒去共享,也就是多個執行緒可能會去訪問同一塊資源,也就是共享這一塊資源。
比如說多執行緒去訪問同乙個物件,同乙個變數,同乙個檔案。
當多個執行緒訪問同一塊資源的時候,很容易引發資料的錯亂和資料的安全問題。
這個時候我們在乙個執行緒在訪問那塊資源的時候,我們需要把它個鎖起來,這樣在這個執行緒訪問的時候,不允許那個執行緒訪問就可以了。
我們應該怎麼去加鎖?任意乙個物件內部都有乙個鎖,預設這把鎖是開啟的,進去之後,鎖就會關上,只要在這裡面的**執行完畢之後,才會再次開啟。我們只需要在下面這個**塊中寫**就可以了。這把鎖其實就是互斥鎖。這個互斥鎖就是為了讓執行緒同步執行,就是讓執行緒按順序執行。
@synchronized (self)
加上鎖會影響程式的效能。使用互斥鎖的時候鎖定的**越少越好,互斥鎖能有效的防止因為多執行緒搶奪資源造成的資料安全問題。
互斥鎖的原理:
每乙個物件的內部都有乙個鎖,當有執行緒要進入的synchronized到**中會先去檢查物件的鎖是開啟還是關閉狀態,預設的是開啟的狀態,如果執行緒執行到**塊的內部會先去加鎖,如果鎖已經關閉了,又有執行緒要去執行**塊就要先去等待,等鎖開啟之後才會再去執行。
加鎖之後程式執行的效率比不加鎖的時候低,因為執行緒先要等待上乙個執行緒先結束把鎖先開啟才能再去執行。鎖保證了執行緒同時操作全域性變數的安全性。
多執行緒共享資源案例
最近研究了一下多執行緒,主要針對於多執行緒共享同一資源,和多執行緒執行各自的資源 其實主要要就是搞清楚資源的含義 你要操作什麼,什麼就是執行緒的資源!1.先說一下多執行緒執行各自的資源 執行各自的資源從字面意思就可以看出來執行緒執行的資源互不干涉,各自執行各自的。案例如下 package testt...
初學多執行緒(一) 保護共享資源
1.共享資源未被保護,被多個執行緒並行訪問,會發生資源分配上的衝突,兩種方法保護共享資源 ps 共享資源像靜態類中的字段,方法 how to protect shared resources from concurrent access?1.使用 interlocked.increment 字段 在...
執行緒安全與共享資源
自併發程式設計網 ifeve.com 執行緒安全與共享資源 畢冉校對 丁一 允許被多個執行緒同時執行的 稱作執行緒安全的 執行緒安全的 不包含競態條件。當多個執行緒同時更新共享資源時會引發競態條件。因此,了解j a執行緒執行時共享了什麼資源很重要。public void somemethod pub...