bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Java并發編程之CAS的案例分析-創新互聯

這篇文章主要介紹Java并發編程之CAS的案例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

為婺城等地區用戶提供了全套網頁設計制作服務,及婺城網站建設行業解決方案。主營業務為成都網站建設、網站制作、婺城網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

在Java并發編程的世界里,synchronized 和 Lock 是控制多線程并發環境下對共享資源同步訪問的兩大手段。其中 Lock 是 JDK 層面的鎖機制,是輕量級鎖,底層使用大量的自旋+CAS操作實現的。

那什么是CAS呢?CAS,compare and swap,即比較并交換,什么是比較并交換呢?在Lock鎖的理念中,采用的是一種樂觀鎖的形式,即多線程去修改共享資源時,不是在修改之前就加鎖,而是樂觀的認為沒有別的線程和自己爭鎖,就是通過CAS的理念去保障共享資源的安全性的。CAS的基本思想是,拿變量的原值和內存中的值進行比較,如果相同,則原值沒有被修改過,那么就將原值修改為新值,這兩步是原子的,能夠保證同一時間只有一個線程修改成功。這就是CAS的理念。

Java中要想使用CAS原子的修改某值,怎么做呢?幸運的是Java提供了這樣的API,就是在sun.misc.Unsafe.java類中。Unsafe,中文名不安全的,也被稱為魔術類,魔法類。

Unsafe類介紹

Unsafe類使Java擁有了像C語言的指針一樣操作內存空間的能力,一旦能夠直接操作內存,這也就意味著

(1)不受JVM管理,意思就是使用Unsafe操作內存無法被JVM GC,需要我們手動GC,稍有不慎就會出現內存泄漏。
(2)Unsafe的不少方法中必須提供原始地址(內存地址)和被替換對象的地址,并且偏移量要自己計算(其提供的有計算偏移量的方法),所以一旦出現問題就是JVM崩潰級別的異常,會導致整個JVM實例崩潰,表現為應用程序直接crash掉。
(3)直接操作內存,所以速度更快,在高并發的條件之下能夠很好地提高效率。

因此,從上面三個角度來看,雖然在一定程度上提升了效率但是也帶來了指針的不安全性。這也是它被取名為Unsafe的原因吧。

下面我們深入到源碼中看看,提供了什么方法直接操作內存。

打開Unsafe這個類,我們會發現里面有大量的被native關鍵字修飾的方法,這意味著這些方法是C語言提供的實現,底層調的是C語言的庫函數,我們無法直接看到他的源碼實現,需要去從OpenJDK去看了。另外還有一些基于native方法封裝的其他方法,整個Unsafe中的方法大致可以歸結為以下幾類:

(1)初始化操作
(2)操作對象屬性
(3)操作數組元素
(4)線程掛起和恢復
(5)CAS機制

CAS的使用

如果你學過java并發編程的話,稍微閱讀過JUC并發包里面的源碼的話,對這個Unsafe類一定不陌生,因為整個java并發包底層實現的核心就是靠它。JUC并發包中主要使用它提供的CAS(compare and swap,比較并交換)操作,原子的修改鎖的狀態和一些隊列元素。

沒看過JUC源碼的讀者也不用擔心,今天我們就是簡單介紹Unsafe類中的CAS操作,那么我們接下來就會通過一個簡單的例子來看看Unsafe的CAS是怎么使用的。

首先,使用這個類我們第一個要做的事情就是拿到這個類的實例,下面我們自定義了一個Util類用來獲取Unsafe的實例

import sun.misc.Unsafe;
import java.lang.reflect.Field;

public class UnsafeUtil {
 public static Unsafe reflectGetUnsafe() {
  try {
   Field field = Unsafe.class.getDeclaredField("theUnsafe");
   field.setAccessible(true);
   return (Unsafe) field.get(null);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
}

本文題目:Java并發編程之CAS的案例分析-創新互聯
本文網址:http://vcdvsql.cn/article40/pjoeo.html

成都網站建設公司_創新互聯,為您提供微信小程序企業網站制作定制網站網頁設計公司服務器托管虛擬主機

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司