中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

JUC類工具有哪些

發布時間:2021-12-21 10:25:57 來源:億速云 閱讀:193 作者:iii 欄目:大數據

本篇內容主要講解“JUC類工具有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JUC類工具有哪些”吧!

JUCjava.util.concurrent 的縮寫,其實現參考了 EDU.oswego.cs.dl.util.concurrent ,是 JSR 166 標準規范的一個實現;JSR 166 是一個關于 Java 并發編程的規范提案,在 JDK 中,該規范由java.util.concurrent 包實現。即JUCJava 提供的并發包,其中包含了一些并發編程用到的基礎組件。 JUC 這個包下的類基本上包含了我們在并發編程時用到的一些工具。大致可以分為以下幾類:JUC類工具有哪些

  • 原子更新 JavaJDK1.5 開始提供了 java.util.concurrent.atomic 包,方便程序員在多線程環 境下,無鎖的進行原子操作。在 Atomic 包里一共有 12 個類,四種原子更新方式,分別是原子更新基本類型,原子更新 數組,原子更新引用和原子更新字段。

  • 鎖和條件變量 java.util.concurrent.locks 包下包含了同步器的框架 AbstractQueuedSynchronizer,基于 AQS 構建的 Lock 以及與 Lock 配合可以實現等待/通知模式的 ConditionJUC 下的大多數工具類用到了 LockCondition 來實現并發。

  • 線程池 涉及到的類比如:ExecutorExecutorsThreadPoolExectorAbstractExecutorServiceFutureCallableScheduledThreadPoolExecutor等等。

  • 阻塞隊列 涉及到的類比如:ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueueLinkedBlockingDeque等等。

  • 并發容器 涉及到的類比如:ConcurrentHashMapCopyOnWriteArrayListConcurrentLinkedQueueCopyOnWriteArraySet等等。

  • 同步器 剩下的是一些在并發編程中時常會用到的工具類,主要用來協助線程同步。比如:CountDownLatchCyclicBarrierExchangerSemaphoreFutureTask 等等。 在學習 JUC 之前我們需要了解 CASAQSUnsafe,對于大部分初學并發編程的同學這幾個概念容易在腦中混淆,所以先分別說說這幾個概念。 <a name="2Ivdn"></a>

Unsafe

Unsafe是位于sun.misc包下的一個類,也是一個不安全的類,為什么會這樣說呢? Java 是一個非常安全的語言, 無法直接訪問操作系統底層,而是通過本地方法進行訪問,但卻給 Unsafe 類開了“后門”, Unsafe類提供了硬件級別的原子操作,直接訪問操作系統底層,操作內存。開發人員如果不正確的使用,極容易造成程序出錯,程序崩潰等問題。,在日常使用 Unsafe 時一定要慎重。在不理解背后原理其不要使用。在Java 9 中官方提出移除 Sun.misc.Unsafe, 對于 Java 語言生態應用太廣并未能輕易移除,在 JAVA 9 新增加了 jdk.internal.misc.Unsafe 類來替代前者的功能。后者 不會直接暴露給應用程序。JUC類工具有哪些

此圖來源美團技術團隊:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html

CAS

Java提供了非阻塞的volatile關鍵字來解決共享變量的可見性問題,這在一定程度上彌補了鎖帶來的開銷問題,但是volatile只能保證共享變量的可見性,不能解決讀—改—寫等的原子性問題。CAS(Compare And Swap)指比較并交換,是原子操作的一種,可用于在多線程編程中實現不被打斷的數據交換操作,從而避免多線程同時改寫某一數據時由于執行順序不確定性以及中斷的不可預知性產生的數據不一致問題。 該操作通過將內存中的值與指定數據進行比較,當數值一樣時將內存中的數據替換為新的值。JDK里面的Unsafe類提供了一系列的 compareAndSwap* 方法。CAS算法CAS(V, E, N)包含3個參數,V表示要更新的變量,E表示預期的值,N表示新值。在且僅在V值等于E值時,才會將V值設為 N,如果V值和 E值不同,則說明已經有其他線程做了更新,當前線程什么都不做。最后,CAS返回當前V的真實值。Concurrent包下所有類底層都是依靠CAS操作來實現,而sun.misc.Unsafe為我們提供了一系列的CAS操作。CAS 會遇到兩個常見的問題?

  • ABA問題

  • 自旋問題

AQS

AbstractQueuedSynchronizer抽象同步隊列簡稱AQS,它是實現同步器的基礎組件,并發包中鎖的底層就是使用AQS實現的。AQS定義了一套多線程訪問共享資源的同步框架,許多同步類的實現都依賴于它,例如常用的SynchronizedReentrantLockReentrantReadWriteLockSemaphoreCountDownLatch等。該框架下的鎖會先嘗試以CAS樂觀鎖去獲取鎖,如果獲取不到,則會轉為悲觀鎖(如RetreenLock)。

到此,相信大家對“JUC類工具有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

juc
AI

溧阳市| 鄂伦春自治旗| 临清市| 略阳县| 车致| 富蕴县| 徐闻县| 蓬莱市| 三门峡市| 阿拉善右旗| 棋牌| 临夏县| 密山市| 通渭县| 三明市| 长顺县| 林西县| 钟祥市| 西贡区| 井陉县| 铜山县| 济南市| 仲巴县| 哈巴河县| 阿拉尔市| 富蕴县| 仁怀市| 筠连县| 邹城市| 来宾市| 通化县| 屏东县| 德兴市| 云林县| 潜江市| 台湾省| 商城县| 石家庄市| 达州市| 泽州县| 浦县|