原创 Java併發包源碼學習系列:阻塞隊列實現之SynchronousQueue源碼解析

目錄SynchronousQueue概述使用案例類圖結構put與take方法void put(E e)E take()Transfer公平模式TransferQueueQNodetransferawaitFulfilltryCancelcl

原创 Java併發包源碼學習系列:阻塞隊列實現之DelayQueue源碼解析

目錄DelayQueue概述類圖及重要字段Delayed接口Delayed元素案例構造器void put(E e)E take()first = null 有什麼用總結參考閱讀 系列傳送門: Java併發包源碼學習系列:AbstractQ

原创 Java併發包源碼學習系列:阻塞隊列實現之PriorityBlockingQueue源碼解析

目錄PriorityBlockingQueue概述類圖結構及重要字段什麼是二叉堆堆的基本操作向上調整void up(int u)向下調整void down(int u)構造器擴容方法tryGrow源碼中向上調整和向下調整實現siftUpCo

原创 Java併發包源碼學習系列:阻塞隊列實現之ArrayBlockingQueue源碼解析

目錄ArrayBlockingQueue概述類圖結構及重要字段構造器出隊和入隊操作入隊enqueue出隊dequeue阻塞式操作E take() 阻塞式獲取void put(E e) 阻塞式插入E poll(timeout, unit) 阻

原创 Java併發包源碼學習系列:阻塞隊列實現之LinkedBlockingQueue源碼解析

目錄LinkedBlockingQueue概述類圖結構及重要字段構造器出隊和入隊操作入隊enqueue出隊dequeue阻塞式操作E take() 阻塞式獲取void put(E e) 阻塞式插入E poll(timeout, unit)

原创 Java併發包源碼學習系列:阻塞隊列BlockingQueue及實現原理分析

目錄本篇要點什麼是阻塞隊列阻塞隊列提供的方法阻塞隊列的七種實現TransferQueue和BlockingQueue的區別1、ArrayBlockingQueue2、LinkedBlockingQueue3、PriorityBlocking

原创 Java併發包源碼學習系列:JDK1.8的ConcurrentHashMap源碼解析

目錄爲什麼要使用ConcurrentHashMap?ConcurrentHashMap的結構特點Java8之前Java8之後基本常量重要成員變量構造方法tableSizeForput方法存值putValinitTabletreeifyBin

原创 Java併發包源碼學習系列:掛起與喚醒線程LockSupport工具類

目錄LockSupport概述park與unpark相關方法中斷演示blocker的作用測試無blocker測試帶blockerJDK提供的demo總結參考閱讀 系列傳送門: Java併發包源碼學習系列:AbstractQueuedSyn

原创 Java併發包源碼學習系列:ReentrantReadWriteLock讀寫鎖解析

目錄ReadWriteLock讀寫鎖概述讀寫鎖案例ReentrantReadWriteLock架構總覽Sync重要字段及內部類表示寫鎖的獲取void lock()boolean writerShouldBlock()void lockInt

原创 Java併發包源碼學習系列:ReentrantLock可重入獨佔鎖詳解

目錄基本用法介紹繼承體系構造方法state狀態表示獲取鎖void lock()方法NonfairSyncFairSync公平與非公平策略的差異void lockInterruptibly()boolean tryLock()方法boolea

原创 Java併發包源碼學習系列:AQS共享式與獨佔式獲取與釋放資源的區別

目錄Java併發包源碼學習系列:AQS共享模式獲取與釋放資源獨佔式獲取資源void acquire(int arg)boolean acquireQueued(Node, int)獨佔式釋放資源boolean release(int arg

原创 Java併發包源碼學習系列:CLH同步隊列及同步資源獲取與釋放

目錄本篇學習目標CLH隊列的結構資源獲取入隊Node addWaiter(Node mode)不斷嘗試Node enq(final Node node)boolean acquireQueued(Node, int)出隊void setHe

原创 Java併發包源碼學習系列:AbstractQueuedSynchronizer

目錄本篇學習目標AQS概述AbstractOwnableSynchronizer同步隊列與Node節點同步狀態state重要方法分析獨佔式獲取與釋放同步狀態共享式獲取與釋放同步狀態AQS條件變量的支持Condition接口Condition

原创 Java8的Optional:如何幹掉空指針?

目錄Optional概述Optional簡單案例Optional的主要方法參考閱讀 Optional概述 Optional 是個容器:它可以保存類型T的value,或者僅僅保存null。Optional提供很多有用的方法,這樣我們就不用顯式

原创 聊一聊NIO的三大組件:Buffer、Channel和Selector

目錄NIO是啥?BufferBuffer中的重要概念Buffer使用Demo常用方法介紹ChannelChannel概述RandomAccessFile#getChannelSocketChannel與ServerSocketChannel