java內(nèi)存模型 JMM
729
2022-05-30
Java內(nèi)存模型
主內(nèi)存與工作內(nèi)存
每條線程還有自己的工作內(nèi)存,線程的工作內(nèi)存中保存了該線程使用的變量的主內(nèi)存副本,線程對變量的所有操作都必須在工作內(nèi)存中進行,而不能直接讀寫主內(nèi)存中的數(shù)據(jù)。不同的線程之間也無法直接訪問對方工作內(nèi)存中的變量,線程將變量值的傳遞均需要通過主內(nèi)存來完成,線程、主內(nèi)存、工作內(nèi)存三者的交互關系如下圖
并發(fā)編程的三個概念
原子性:基本數(shù)據(jù)類型的訪問、讀寫都是具備原子性的
可見性:是指當一個線程修改了共享變量的值時,其他線程能夠立即得知這個改變。
有序性:如果在本線程內(nèi)觀察所有的線程都是有序的;如果在一個線程中觀察另一個線程,所有的操作都是無序的。
指令重排:
為了提高程序運行效率、單線程下執(zhí)行結(jié)果一致
Volidate
禁止進行指令重排序、保證修改的值會立即被更新到主存,當有其他線程需要讀取時,它會去內(nèi)存中讀取新值
Happen-before原則
使用內(nèi)核線程實現(xiàn)的方式也成為1:1實現(xiàn)。
使用用戶線程實現(xiàn)的方式也成為1:N實現(xiàn)。
用戶線程與輕量級進程之間M:N的關系
大大降低了整個進程被完全阻塞的方向,在這種混合模式中,用戶線程與輕量級進程的數(shù)量比是不定的,是M:N的關系
協(xié)同式線程調(diào)度:線程的執(zhí)行時間由線程本身來控制,線程把自己的工作執(zhí)行完了之后,要主動通知系統(tǒng)切換到另一個線程上去。
搶占式線程調(diào)度:每個線程間由系統(tǒng)來分配執(zhí)行時間,現(xiàn)成的切換不由線程本身來決定。
Java 任務調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。