更新時(shí)間:2020-05-20 09:10:41 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1791次
作為當(dāng)前市場(chǎng)上的主流編程語言,Java一直深受人們青睞,很多決定入行IT開發(fā)的人都會(huì)首擇Java。為了能夠快速的掌握J(rèn)ava理論知識(shí)并積累相應(yīng)的項(xiàng)目經(jīng)驗(yàn),越來越多的人選擇參加Java培訓(xùn)班,接下來小編就給大家分享一下并發(fā)編程JMM相關(guān)知識(shí)。
Java線程之間的通信由Java內(nèi)存模型(JMM)控制,JMM決定一個(gè)線程對(duì)共享變量的寫入何時(shí)對(duì)另一個(gè)線程可見。
Java內(nèi)存模型規(guī)定了所有的變量都存儲(chǔ)在主內(nèi)存中,每個(gè)線程擁有自己的工作內(nèi)存,工作內(nèi)存中保存了被該線程使用的變量的主內(nèi)存副本拷貝,線程只能操作自己工作內(nèi)存的變量副本,操作完變量后會(huì)更新到主內(nèi)存,通過主內(nèi)存來完成與其他線程間變量值的傳遞。
在Java多線程開發(fā)中,遵循著三個(gè)基本特性,分別是原子性、可見性和有序性,而Java的內(nèi)存模型正是圍繞著在并發(fā)過程中如何處理這三個(gè)特征建立的。
原子性
原子性是指操作是原子性的、不可中斷的。比如:Strings="abc";這個(gè)操作是直接賦值,是原子性操作。再比如:i++;當(dāng)執(zhí)行i++時(shí),需要先獲取i的值,然后再執(zhí)行i+1,相當(dāng)于包含了兩個(gè)操作,所以不是原子性。
可見性
可見性是指共享數(shù)據(jù)的時(shí)候,一個(gè)線程修改了數(shù)據(jù),其他線程知道數(shù)據(jù)被修改,會(huì)重新讀取最新的主存的數(shù)據(jù)。
有序性
是指代碼執(zhí)行的有序性,對(duì)于一個(gè)線程執(zhí)行的代碼,我們可以認(rèn)為代碼是依次執(zhí)行的,但并發(fā)中可能就會(huì)出現(xiàn)亂序,因?yàn)榇a有可能發(fā)生指令重排序(InstructionReorder),重排后的指令與原指令的順序未必一致。編譯器能夠自由的以優(yōu)化的名義去改變指令順序,在特定的環(huán)境下,處理器可能會(huì)次序顛倒的執(zhí)行指令。
注意:Java內(nèi)存模型不同于Java內(nèi)存結(jié)構(gòu),不要將二者概念混淆。Java內(nèi)存模型是為了解決各線程之間的通信所抽象出來的概念,Java內(nèi)存結(jié)構(gòu)則是Java中的數(shù)據(jù)存儲(chǔ)形式,也就是經(jīng)常提到的堆內(nèi)存、棧內(nèi)存等。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“安陽java培訓(xùn)入門課程并發(fā)編程JMM學(xué)習(xí)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)