欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java并發(fā)編程之CAS的案例分析-創(chuàng)新互聯(lián)

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

為婺城等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及婺城網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、婺城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

在Java并發(fā)編程的世界里,synchronized 和 Lock 是控制多線程并發(fā)環(huán)境下對(duì)共享資源同步訪問的兩大手段。其中 Lock 是 JDK 層面的鎖機(jī)制,是輕量級(jí)鎖,底層使用大量的自旋+CAS操作實(shí)現(xiàn)的。

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

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

Unsafe類介紹

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

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

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

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

打開Unsafe這個(gè)類,我們會(huì)發(fā)現(xiàn)里面有大量的被native關(guān)鍵字修飾的方法,這意味著這些方法是C語(yǔ)言提供的實(shí)現(xiàn),底層調(diào)的是C語(yǔ)言的庫(kù)函數(shù),我們無法直接看到他的源碼實(shí)現(xiàn),需要去從OpenJDK去看了。另外還有一些基于native方法封裝的其他方法,整個(gè)Unsafe中的方法大致可以歸結(jié)為以下幾類:

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

CAS的使用

如果你學(xué)過java并發(fā)編程的話,稍微閱讀過JUC并發(fā)包里面的源碼的話,對(duì)這個(gè)Unsafe類一定不陌生,因?yàn)檎麄€(gè)java并發(fā)包底層實(shí)現(xiàn)的核心就是靠它。JUC并發(fā)包中主要使用它提供的CAS(compare and swap,比較并交換)操作,原子的修改鎖的狀態(tài)和一些隊(duì)列元素。

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

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

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并發(fā)編程之CAS的案例分析-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://aaarwkj.com/article40/pjoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、企業(yè)網(wǎng)站制作定制網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
精品国产品国语在线不卡| 国产91高清视频在线观看| 久久中文字幕av一区| 免费国产污在线观看网站| 欧美福利免费在线视频| 最新免费观看男女啪啪视频 | 国产精品一级片一区二区| 日韩有码中文字幕av | av在线中文字幕乱码| 一区二区三区日韩欧美在线| 国内熟妇人妻色在线三级| 亚洲综合成人av在线| 99国产精品的热久久| 在线观看青青草原免费| 国产精品av在线网站| 激情四射五月天亚洲婷婷| 国产亚洲一区二区三区日韩| 亚洲精品一区二区影院| 亚洲欧美日韩一区91| 亚洲国产偷拍在线观看| 中文字幕精品高清中国| 高清亚洲一区二区三区| 久久麻豆精亚洲av品国产一区| 日韩欧美一区二区三级| 青青成线在人线免费啪| 亚洲欧美日韩不卡视频| 国产亚洲一区二区三区在线| 高清av中文免费在线| 蜜桃在线视频在线观看| 成人黄色av网站在线观看| 在线天堂一区二区三区| 国产成十人十综合十亚洲| 日本精品在线亚洲国产欧美| 亚洲国产精品自拍视频| 91九色在线精品一区| 在线麻豆国产传媒免费| 日本黄色录像黄色录像| 91亚洲自偷观看高清| 久久精品免成人费电影| 日韩精品电影一二三| 亚洲一区二区视频精品|