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

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è)公司
欧美日本黄色一级视频| 日本一区二区精品视频| 国产一区二区成人精品| 蜜桃传媒18传媒在线| 91福利免费在线看| 加勒比久久精品网址系列| 国产精品一区二区剧情熟女| 中文字幕一区日韩欧美| 成人国产在线欧美精品| 国产成人公开免费视频| 中文字幕国产精品一二区| 亚洲美腿丝袜综合在线| 密臀av一区二区三区| 国产成人原创免费观看| 成人黄色免费在线网站| 青青青在线视频观看华人| 免费黄片视频大全在线播放| 色噜噜人妻av中文字幕| 成人午夜在线三级内射| 一区二区在线视频中文字幕| 亚洲中文波霸中文字幕| 国产极品美女高潮抽搐| 亚洲国产自拍偷拍视频| 国产成人精品无人区一区| 热热久久这里只有精品| 欧美日韩一区二区综合性色| 久久久久久狠狠亚洲综合| 人人妻人人澡人人揉| 日本精品免费专区在线观看| 成人午夜激情在线观看| 日韩精品一区中文字幕在线| 日韩精品一区二区三区人妻视频 | 久久久久久极精品久久久| 91麻豆精品一二三区在线| 国产一区二区三区免费有码视频| 性生活自制视频网站麻豆| 欧美成人精品午夜一区二区| 精品妇女一区二区三区| 91薄丝激情在线播放| 日本一区二区高清网址| 亚洲精品你懂的av在线|