JAVA并發(fā)圖解
JAVA并發(fā)總覽
核心問題
并不是程序的漏洞導(dǎo)致的,而是操作系統(tǒng)底層機制導(dǎo)致的

原子性:

可見性問題:
改的是緩存,但是緩存對另一個線程不可見

有序性問題:
正常應(yīng)該先創(chuàng)建對象,再賦值;而編譯器對指令執(zhí)行順序出于某些原因進行了優(yōu)化,然后改變了執(zhí)行順序,如下:

解決方案
可見性:

有序性:
這個原則在加了volatile和鎖的時候自動生效,也就是說解決了可見性和原子性,可見性順帶就解決了

原子性:
操作系統(tǒng)角度,監(jiān)視器的名字是管程
解決了原子性問題,可見性和有序性都能解決



并發(fā)工具
CAS的方式會出現(xiàn)ABA問題,就是說是被修改了兩次而又變回了原來的值,但是檢查是沒有變化的,對于引用對象就會出現(xiàn)問題,引用對象地址沒變,但是引用的東西發(fā)生了變化

其他方案
ThreadLocal,線程是Key,值是線程的數(shù)據(jù),每個線程取東西存東西,都是通過線程key區(qū)分,來隔離的

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Java并發(fā)編程之代碼實現(xiàn)兩玩家交換裝備
- Java并發(fā)編程之阻塞隊列(BlockingQueue)詳解
- java實戰(zhàn)案例之用戶注冊并發(fā)送郵件激活/發(fā)送郵件驗證碼
- java并發(fā)編程JUC CountDownLatch線程同步
- Java并發(fā)之Condition案例詳解
- java并發(fā)編程之ThreadLocal詳解
- Java 處理高并發(fā)負(fù)載類優(yōu)化方法案例詳解
- 淺談Java高并發(fā)解決方案以及高負(fù)載優(yōu)化方法
- Java httpClient連接池支持多線程高并發(fā)的實現(xiàn)
- Java中常見的并發(fā)控制手段淺析
- Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗詳解
- Java面試題沖刺第二十四天--并發(fā)編程
- Java 模擬真正的并發(fā)請求詳情
相關(guān)文章
Spring的事件發(fā)布與監(jiān)聽方式案例講解
今天去官網(wǎng)查看spring?boot資料時,在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03
java怎么設(shè)置代理ip實現(xiàn)高效網(wǎng)絡(luò)請求
無論是在爬蟲、API調(diào)用還是網(wǎng)絡(luò)測試中,代理IP的使用都變得愈發(fā)重要,本文我們主要來介紹一下如何在Java中設(shè)置代理IP實現(xiàn)高效網(wǎng)絡(luò)請求吧2024-11-11
java 高并發(fā)中volatile的實現(xiàn)原理
這篇文章主要介紹了java 高并發(fā)中volatile的實現(xiàn)原理的相關(guān)資料,在多線程并發(fā)編程中synchronized和Volatile都扮演著重要的角色,Volatile是輕量級的synchronized,它在多處理器開發(fā)中保證了共享變量的“可見性”,需要的朋友可以參考下2017-03-03

