91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java并發編程中并發機制的底層實現原理是什么

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

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

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

1、volatile

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

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

(1)、將當前處理器緩存行的數據寫會到系統內存

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

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

2、synchronized

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

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

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

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

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

三種鎖的對比

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

3、原子操作

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

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

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

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

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

向AI問一下細節

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

AI

苗栗县| 且末县| 长兴县| 加查县| 曲阜市| 汽车| 九寨沟县| 柳州市| 隆安县| 固安县| 利津县| 晋中市| 泸定县| 红原县| 二连浩特市| 年辖:市辖区| 合水县| 乐安县| 如皋市| 即墨市| 田东县| 潞西市| 鹤岗市| 抚顺市| 淮北市| 阳泉市| 南汇区| 陇川县| 嘉祥县| 子洲县| 江都市| 葫芦岛市| 高邑县| 双辽市| 昌黎县| 噶尔县| 克东县| 太仆寺旗| 大名县| 东莞市| 许昌县|