溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java并發(fā)編程中并發(fā)機制的底層實現(xiàn)原理是什么

發(fā)布時間:2021-10-12 10:02:18 來源:億速云 閱讀:103 作者:柒染 欄目:云計算

今天就跟大家聊聊有關(guān)Java并發(fā)編程中并發(fā)機制的底層實現(xiàn)原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Java中的并發(fā)機制依賴于JVM的實現(xiàn)和CPU指令,接下來我們深入底層探索Java并發(fā)機制的實現(xiàn)原理。

1、volatile

      Java中允許線程訪問共享變量,為了保證共享變量能夠一致的被更新,線程應該確保通過排他鎖單獨的獲取這個變量。Java中就提供了volatile,如果一個字段被聲明成volatile,在java線程內(nèi)存模型確保所有的線程看到的這個變量的值都是一致的。

volatile是一種輕量級synchronized,而且執(zhí)行的成本比較低,沒有上下文切換的消耗。volatile修飾的共享變量在進行寫操作的時候,在多處理器下會引起兩件事:

(1)、將當前處理器緩存行的數(shù)據(jù)寫會到系統(tǒng)內(nèi)存

(2)、這個回寫操作會使得CPU中其他的處理器緩存了該地址的數(shù)據(jù)無效。

對于高速緩存行是64個字節(jié)寬的處理器,如果隊列的頭節(jié)點和尾節(jié)點都不足64字節(jié)的話,處理器會將他們讀到同一個高速緩存行,修改頭節(jié)點時,會將整個緩存行鎖定,導致其它的處理器不能讀到自己的高速緩存區(qū)的尾節(jié)點。影響出隊列和入隊列操作的效率。追加64字節(jié)能夠?qū)olatile的性能進行優(yōu)化,避免頭節(jié)點和尾節(jié)點同時加載到同一個高速緩存行中,避免互相鎖定。

2、synchronized

上面的追加字節(jié)的方式可能在Java 7 中不生效,它會淘汰或重排序無用的字段,除了volatile,Java中用的較多的的synchronized,下面看一下:

synchronized是一種重量級鎖,Java中每個對象多可以作為鎖,具體是下面3種形式:
(1)、普通同步方法,鎖是當前實例對象

(2)、靜態(tài)同步方法,瑣是當前類的Class對象

(3)、同步方法塊,鎖是synchronized 括號里配置的對象

synchronized用的鎖是存在Java對象頭的,對象頭中有字段標示當前是哪種鎖,鎖一共4種狀態(tài)、級別由低到高:無鎖狀態(tài)、偏向鎖狀態(tài)、輕量級鎖、重量級鎖

三種鎖的對比

優(yōu)點缺點適用場景
  偏向鎖加鎖和解鎖不需要額外的消耗,                           如果線程間存在鎖的競爭,會帶來額外的鎖撤銷的消耗     適用于只有一個線程訪問同步塊的場景
   輕量級鎖         競爭的線程不會阻塞,提高了線程的響應時間如果始終得不到鎖競爭的線程,會自旋消耗CPU追求響應時間,同步塊執(zhí)行非???nbsp;
   重量級鎖線程競爭不會使用自旋,不會消耗CPU,線程阻塞,響應時間緩慢追求吞吐量,同步塊執(zhí)行速度較慢

3、原子操作

原子操作是指不可中斷的一個或一系列的操作,一般的處理器是利用總線加鎖或者緩存加鎖的方式實現(xiàn)多處理器之間的原子操作。

總線鎖定:處理器提供一個LOCK # 信號,剛一個處理器在總線上輸出一個信號時,其它的處理器請求就會被阻塞住,那么該處理器就可以獨占共享內(nèi)存了。

緩存鎖定:內(nèi)存區(qū)域如果被緩存在處理器的緩存行中,在Lock操作期間被鎖定,在執(zhí)行鎖操作回寫到內(nèi)存時,處理器不在總線上聲言LOCK #信號,而是修改內(nèi)存地址,緩存的一致性機制會阻止同時修改由2個以上處理器緩存的內(nèi)存區(qū)數(shù)據(jù),其他的處理器成功回寫被鎖定的緩存行數(shù)據(jù)時,會使緩存行無效,其它的處理器就不能在使用這個緩存行了。

Java中是通過使用鎖個CAS(atomic包)的方式來實現(xiàn)原子操作。

看完上述內(nèi)容,你們對Java并發(fā)編程中并發(fā)機制的底層實現(xiàn)原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI