成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java多線程進階(十二)—— J.U.C之a(chǎn)tomic框架:Unsafe類

趙連江 / 1687人閱讀

摘要:本身不直接支持指針的操作,所以這也是該類命名為的原因之一。中的許多方法,內(nèi)部其實都是類在操作。

本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog...
一、Unsafe簡介

在正式的開講 juc-atomic框架系列之前,有必要先來了解下Java中的Unsafe類。

Unsafe類,來源于sun.misc包。該類封裝了許多類似指針操作,可以直接進行內(nèi)存管理、操縱對象、阻塞/喚醒線程等操作。Java本身不直接支持指針的操作,所以這也是該類命名為Unsafe的原因之一。

J.U.C中的許多CAS方法,內(nèi)部其實都是Unsafe類在操作。
比如AtomicBooleancompareAndSet方法:

unsafe.compareAndSwapInt方法是個native方法。(如果對象中的字段值與期望值相等,則將字段值修改為x,然后返回true;否則返回false):

入?yún)⒌暮x如下:

參數(shù)名稱 含義
o 需要修改的對象
offset 需要修改的字段到對象頭的偏移量(通過偏移量,可以快速定位修改的是哪個字段)
expected 期望值
x 要設(shè)置的值

Unsafe類中CAS方法都是native方法,需要通過CAS原子指令完成。在講AQS時,里面有許多涉及CLH隊列的操作,其實就是通過Unsafe類完成的指針操作。

二、Unsafe對象的創(chuàng)建

Unsafe是一個final類,不能被繼承,也沒有公共的構(gòu)造器,只能通過工廠方法getUnsafe獲得Unsafe的單例。

但是getUnsafe方法限制了調(diào)用該方法的類的類加載器必須為Bootstrap ClassLoader。

Java中的類加載器可以大致劃分為以下三類:

類加載器名稱 作用
Bootstrap類加載器(Bootstrap ClassLoader) 主要加載的是JVM自身需要的類,這個類加載使用C++語言實現(xiàn)的,是JVM自身的一部分,它負責將 【JDK的安裝目錄】/lib路徑下的核心類庫,如rt.jar
擴展類加載器(Extension ClassLoader) 該加載器負責加載【JDK的安裝目錄】jrelibext目錄中的類庫,開發(fā)者可以直接使用該加載器
系統(tǒng)類加載器(Application ClassLoader) 負責加載用戶類路徑(ClassPath)所指定的類,開發(fā)者可以直接使用該類加載器,也是默認的類加載器

所以在用戶代碼中直接調(diào)用getUnsafe方法,會拋出異常。因為用戶自定義的類一般都是由系統(tǒng)類加載器加載的。

但是,是否就真的沒有辦法獲取到Unsafe實例了呢?當然不是,要獲取Unsafe對象的方法很多,這里給出一種通過反射的方法:

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

但是,除非對Unsafe的實現(xiàn)非常清楚,否則應(yīng)盡量避免直接使用Unsafe來進行操作。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76542.html

相關(guān)文章

  • Java線程進階(十五)—— J.U.Catomic框架Atomic數(shù)組

    摘要:注意原子數(shù)組并不是說可以讓線程以原子方式一次性地操作數(shù)組中所有元素的數(shù)組。類的方法返回指定類型數(shù)組的元素所占用的字節(jié)數(shù)。,是將轉(zhuǎn)換為進制,然后從左往右數(shù)連續(xù)的個數(shù)。 showImg(https://segmentfault.com/img/remote/1460000016012145); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一...

    lunaticf 評論0 收藏0
  • Java線程進階(一)—— J.U.C并發(fā)包概述

    摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計模式,設(shè)計了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...

    anonymoussf 評論0 收藏0
  • Java線程進階(十三)—— J.U.Catomic框架AtomicInteger

    摘要:顧名思義,是類型的線程安全原子類,可以在應(yīng)用程序中以原子的方式更新值。創(chuàng)建對象先來看下對象的創(chuàng)建。也就是說當一個線程修改一個共享變量時,其它線程能立即讀到這個修改的值。 showImg(https://segmentfault.com/img/remote/1460000016012210); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... ...

    darkbug 評論0 收藏0
  • Java線程進階(十六)—— J.U.Catomic框架:FieldUpdater

    摘要:所謂,就是可以以一種線程安全的方式操作非線程安全對象的某些字段。我們來對上述代碼進行改造賬戶類改造引入通過操作字段調(diào)用方,并未做任何改變上述代碼,無論執(zhí)行多少次,最終結(jié)果都是,因為這回是線程安全的。這也是整個包的設(shè)計理念之一。 showImg(https://segmentfault.com/img/remote/1460000016012109); 本文首發(fā)于一世流云的專欄:http...

    darcrand 評論0 收藏0
  • Java線程進階(十七)—— J.U.Catomic框架:LongAdder

    摘要:在并發(fā)量較低的環(huán)境下,線程沖突的概率比較小,自旋的次數(shù)不會很多。比如有三個,每個線程對增加。的核心方法還是通過例子來看假設(shè)現(xiàn)在有一個對象,四個線程同時對進行累加操作。 showImg(https://segmentfault.com/img/remote/1460000016012084); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... ...

    fengxiuping 評論0 收藏0

發(fā)表評論

0條評論

趙連江

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<