原创 【LeetCode.26】 刪除排序數組中的重複項

題目描述 給定一個排序數組,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定

原创 使用NIO從阻塞式通信到非阻塞式通信——各種示例循序漸進帶你理解

文章目錄使用NIO進行阻塞式通信分析阻塞過程反過來,client讀取數據,server發送數據client和server同時寫入client和server同時讀取服務端加上反饋關於shutdownOutput和shutdownIn

原创 AQS深入理解 doReleaseShared源碼分析 JDK8

文章目錄前言調用doReleaseShared的流程doReleaseShared分析head狀態爲0的情況特殊情況PROPAGATE狀態設置後,並沒有被檢測到總結 前言 Release action for shared mo

原创 interrupt()中斷對LockSupport.park()的影響

文章目錄原理簡單講解調用park()與unpark()park/unpark實現的僞代碼park/unpark的實驗interrupt()與park()interrupt()實現的僞代碼interrupt()實驗sleep()與i

原创 AQS深入理解系列(四)Condition接口的實現

文章目錄前言與wait/notify進行對比同步隊列 和 條件隊列sync queuecondition queue二者的關係CondtionObjectawait()第一次調用park之前addConditionWaiterun

原创 AQS深入理解系列(三)共享鎖的獲取與釋放

文章目錄前言共享鎖與獨佔鎖的區別觀察Semaphore的內部類共享鎖的獲取共享鎖的釋放head狀態爲0的情況同時執行doReleaseShared總結 前言 在前面兩篇系列文章中,已經講解了獨佔鎖的獲取和釋放過程,而共享鎖的獲取與

原创 AQS深入理解系列(一) 獨佔鎖的獲取過程

文章目錄前言AQS實現核心state等待隊列CAS根據實現核心找AQS的成員state等待隊列CAS觀察ReentrantLock的內部類公平的、不響應中斷的 獨佔鎖的獲取tryAcquireaddWaiterenqenq的尾分叉

原创 AQS深入理解 shouldParkAfterFailedAcquire源碼分析 狀態爲0或PROPAGATE的情況分析

文章目錄流程分析誰是調用shouldParkAfterFailedAcquire的線程什麼時候會從parkAndCheckInterrupt中喚醒釋放鎖後,喚醒head後繼的條件shouldParkAfterFailedAcqui

原创 JUC框架 系列文章目錄 JDK8

前言 筆者在接下來這段時間將對JUC框架內的重點內容進行深度解析,由於內容頗多,需要分成多篇文章,所以在這裏列一個目錄,方便大家翻閱。 目錄 JUC框架的基礎是CAS和自旋,而CAS則是利用Unsafe類提供的CAS操作,而原子類

原创 AQS深入理解系列(二) 獨佔鎖的釋放過程

文章目錄前言ReentrantLock.unlock()releasetryReleaseunparkSuccessorhead後繼從哪裏被喚醒 前言 在上一篇文章AQS深入理解 獨佔鎖的獲取過程中,我們分析了獨佔鎖的獲取過程。相

原创 AQS深入理解 setHeadAndPropagate源碼分析 JDK8

文章目錄前言共享鎖獲取流程setHeadAndPropagate分析總結 前言 Sets head of queue, and checks if successor may be waiting in shared mode,

原创 Java併發 volatile可見性的驗證

文章目錄普通讀 無法及時獲得 主內存變量volatile讀 及時獲得 主內存變量普通讀+sleep普通讀+同步塊同步塊 遭遇 鎖消除普通讀+System.out.println 普通讀 無法及時獲得 主內存變量 public cl

原创 AQS深入理解 hasQueuedPredecessors源碼分析 JDK8

文章目錄前言流程hasQueuedPredecessors分析爲什麼先讀取tail,再讀取head先讀取tail,再讀取head的好處是否需要考慮 指令重排序虛假返回的true和false虛假返回true虛假返回false 前言

原创 JUC AtomicStampedReference源碼解析 JDK8

前言 大家都知道CAS操作有ABA問題的,且ABA問題是針對引用型對象的,而AtomicStampedReference的出現就是爲了解決這一問題而出現的。通過加版本號來實現。 成員 public class AtomicStam

原创 JUC AtomicIntegerArray源碼解析 JDK8

前言 AtomicIntegerArray提供了對數組元素的原子操作,與其他非數組的原子類相比,它的成員不是volatile的而是final的了。 成員 private static final Unsafe unsafe