這篇文章給大家分享的是有關JAVA并發的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
并不是程序的漏洞導致的,而是操作系統底層機制導致的
原子性:
可見性問題:
改的是緩存,但是緩存對另一個線程不可見
有序性問題:
正常應該先創建對象,再賦值;而編譯器對指令執行順序出于某些原因進行了優化,然后改變了執行順序,如下:
可見性:
有序性:
這個原則在加了volatile和鎖的時候自動生效,也就是說解決了可見性和原子性,可見性順帶就解決了
原子性:
操作系統角度,監視器的名字是管程
解決了原子性問題,可見性和有序性都能解決
CAS的方式會出現ABA問題,就是說是被修改了兩次而又變回了原來的值,但是檢查是沒有變化的,對于引用對象就會出現問題,引用對象地址沒變,但是引用的東西發生了變化
ThreadLocal,線程是Key,值是線程的數據,每個線程取東西存東西,都是通過線程key區分,來隔離的
感謝各位的閱讀!關于“JAVA并發的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。