色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java內(nèi)存模型的核心問題就是如何解決一致性問題?

吉茹定2年前11瀏覽0評論

java內(nèi)存模型其實是跟計算機硬件發(fā)展息息相關(guān)的,CPU的運算能力相比較于硬盤,內(nèi)存的存取能力是相當高的,就好比我(CPU)分明能一分鐘從1加到100,你(內(nèi)存)卻只能給到我1到10,內(nèi)存的存取大大的限制了CPU的運算,所以就在內(nèi)存和CPU中間加了高速緩存,用于CPU的快速計算,如下圖:

JAVA內(nèi)存模型也采用了相似的結(jié)構(gòu),線程與CPU交互的時候,為了快速的進行運算,線程本地會開辟一份內(nèi)存用于數(shù)據(jù)存儲,然后快速的與CPU進行交互,CPU的運算數(shù)據(jù)也通過線程推送到內(nèi)存中,如下圖:

現(xiàn)在問題來了,從CPU到主內(nèi)存需要經(jīng)過線程的本地內(nèi)存,在多線程的環(huán)境下,如果CPU運算數(shù)據(jù)不能及時的推到主內(nèi)存中,就引發(fā)了線程安全問題,比如java中的經(jīng)典案例i=0;i++;這么一個簡單地語句,如果線程1將i變?yōu)?之后還沒來得及寫到主內(nèi)存中,線程2也是用i=0這個數(shù)據(jù)去運算,那么原本i++兩次之后應(yīng)該得到2,現(xiàn)在卻只能輸出1;

由此可見java內(nèi)存模型是模擬計算機硬件設(shè)計的,主要的作用其實還是用來提升整個系統(tǒng)的運算能力,但卻由此產(chǎn)生了多線程的線程安全問題,線程安全的主要問題是原子性,可見性,有序性問題;

怎么解決線程安全的問題呢?

1,資源不共享:比如TheadLocal,數(shù)據(jù)直接放在線程的本地內(nèi)存中,每個線程有一份自己的數(shù)據(jù),不存在安全問題

2,資源共享但是加鎖:比如synchronize,reentrantLock等,將共享資源進行加鎖,只有在保證線程處理完成或者中斷的時候,才會讓別的線程繼續(xù)處理這份數(shù)據(jù);

3,資源共享但是無鎖:比如AtomicBoolean,AtomicInteger等主要是使用CAS保證數(shù)據(jù)的原子性操作,使用volatile保證數(shù)據(jù)的可見性來保證數(shù)據(jù)安全;

本文提到的東西比較淺顯易懂,更多深入的,精彩的java方面的技術(shù)分享正在路上,需要的朋友敬請關(guān)注。。。