|企服解答
線程安全的方式有哪些:1.互斥同步;2.非阻塞同步;3.無同步方案;等等。
線程安全的方式有哪些
1.互斥同步
使用互斥鎖的方式。
優點:在共享資源搶占頻繁的情況下,能很好的保護共享資源的同步使用,防止數據錯誤。
缺點:性能較差,因線程需要阻塞等待;線程阻塞喚醒需要用戶態與核心態切換,會消耗cpu性能。
2.非阻塞同步
顧名思義,就是通過不阻塞線程的方式進行共享資源的同步操作,具體方法有就是使用CAS思想進行并發策略,具體詳情如下:
具體操作方案:
CAS設計中包含三個操作數:
讀寫的內存位置(V)
進行比較的預期原值(A)
擬寫入的新值(B)
如果內存位置V的值與預期原值A相匹配,那么處理器會自動將該位置值更新為新值B,否則處理器不做任何操作。
當多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程沒有阻塞,而是進行“自旋”等待。
3.無同步方案
一個方法如果不涉及共享數據,那它自然就無須任何同步措施去保證多線程的安全性。
(1)可重入代碼
多個線程訪問同一個方法的局部變量時,是不會出現線程安全問題,因為局部變量存儲在虛擬機棧中,屬于線程私有的。
(2)線程本地存儲
把共享數據的可見范圍限制在同一個線程之內,無須同步來能保證線程之間不出現數據爭用的問題。ThreadLocal并不是一個Thread,而是Thread的內部變量,用于存放本線程使用的數據,僅本線程可見。
[免責聲明]
文章標題: 線程安全的方式有哪些
文章內容為網站編輯整理發布,僅供學習與參考,不代表本網站贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請及時溝通。發送郵件至36dianping@36kr.com,我們會在3個工作日內處理。