原创 JDK源碼分析實戰系列-PriorityBlockingQueue

前言 可以通過分析PriorityBlockingQueue來了解JUC中的線程安全的隊列實現的一些套路,這些套路會在JUC中其他數據結構實現上反覆出現,從而可以更合理的瞭解那些實現機制背後通用的部分。 BlockingQueue A Q

原创 JDK源碼分析實戰系列-PriorityQueue

完全二叉樹 一棵深度爲k的有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號爲i(1≤i≤n)的結點與滿二叉樹中編號爲i的結點在二叉樹中的位置相同,則這棵二叉樹稱爲完全二叉樹。 特殊之處是這個類型可以通過數組來

原创 NIO基礎-Netty系列-2

概述 初步瞭解了NIO核心組件的API,也大致知道了如何啓動一個網絡IO服務和客戶端後。本篇在此基礎上做一些補充,把一些必須要理解的 正文 ServerSocketChannel的accept方法和Selecor的select 在Serve

原创 NIO基礎-Netty系列-1

概覽 最近弄幾篇NIO基礎相關的內容,用於Netty源碼解析使用。因爲沒有這些知識就產生不了問題,也就無法深入一個成熟的網絡IO框架源碼進行學習。 NIO三大核心組件: 1,Channel 2,Buffer 3,Selector 先概述一下

原创 冪等公共組件

前言 今天想聊一聊冪等相關的知識,以及實現一個冪等公共組件需要重點涉及和思考的點。 概念 首先,什麼是冪等,在實際代碼生產過程中有什麼作用呢? 在編程中一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。 舉個例子,假

原创 Future源碼一觀-JUC系列

背景介紹 在程序中,主線程啓動一個子線程進行異步計算,主線程是不阻塞繼續執行的,這點看起來是非常自然的,都已經選擇啓動子線程去異步執行了,主線程如果是阻塞的話,那還不如主線程自己去執行不就好了。那會不會有一種場景,異步線程執行的結果主線程是

原创 AQS源碼三視-JUC系列

AQS源碼三視-JUC系列 前兩篇文章介紹了AQS的核心同步機制,使用CHL同步隊列實現線程等待和喚醒,一個int值記錄資源量。爲上層各式各樣的同步器實現畫好了模版,像已經介紹到的ReentrantLock,Semaphroe,CountD

原创 AQS源碼二探-JUC系列

本文已在公衆號上發佈,感謝關注,期待和你交流。 AQS源碼二探-JUC系列 共享模式 doAcquireShared 這個方法是共享模式下獲取資源失敗,執行入隊和等待操作,等待的線程在被喚醒後也在這個方法中自旋執行,直到拿到資源。 /**

原创 AQS源碼一窺-JUC系列

AQS源碼一窺 考慮到AQS的代碼量較大,涉及信息量也較多,計劃是先使用較常用的ReentrantLock使用代碼對AQS源碼進行一個分析,一窺內部實現,然後再全面分析完AQS,最後把以它爲基礎的同步器都解析一遍。 暫且可以理解AQS的核心

原创 Doug Lea文章閱讀記錄-JUC系列

3.3 Queues The heart of the framework is maintenance of queues of blocked threads, which are restricted here to FIFO qu

原创 自旋鎖-JUC系列

公衆號原文:自旋鎖-JUC系列 前言 2022!這個年份現在看起來都覺得有那麼些恍惚的未來感,然而現在已在腳下。 無邊落木蕭蕭下, 不盡長江滾滾來! 人生如白駒過隙! 本來計劃最近把AQS源碼分析做了,然後自下而上把JUC整個探一遍,集合成

原创 JDK源碼分析實戰系列-ThreadLocal

公衆號原文鏈接* 總覽 ThreadLocal提供了線程局部變量的解決方案。 我們知道成員變量在多線程下是不安全的,而局部變量的生命週期又取決於變量定義的範圍。那麼有沒有一個變量定義可以專屬於各自線程,生命週期由線程控制,並且和其他線程的變

原创 低版本spring-cloud-sleuth的TraceableExecutorService一個坑,注意繞行

我們知道Java 線程池提交任務有兩種: 1,submit 會拋出異常,會有異常日誌 2,execute 沒有拋出異常,需要執行返回值Future的get方法觸發拋出異常 execute在執行中沒有做任何包裝,在線程池源碼中會執行到runW

原创 責任鏈模式總結

定義 來自 GoF 的《設計模式》權威定義如下: Avoid coupling the sender of a request to its receiver by giving more than one object a chance

原创 Druid監控Admin使用記錄

druid監控配置 StatViewServlet 使用過druid-spring-boot-starter的同學應該知道只需要通過這個配置就可以開啓監控頁面:spring.datasource.druid.stat-view-servle