原创 Java併發編程:什麼是CAS?這回總算知道了

無鎖的思想 衆所周知,Java中對併發控制的最常見方法就是鎖,鎖能保證同一時刻只能有一個線程訪問臨界區的資源,從而實現線程安全。然而,鎖雖然有效,但採用的是一種悲觀的策略。它假設每一次對臨界區資源的訪問都會發生衝突,當有一個線程訪問資

原创 Java併發編程:Java的四種線程池的使用,以及自定義線程工廠

文章目錄引言四種線程池newCachedThreadPool:可緩存的線程池newFixedThreadPool:定長線程池newSingleThreadExecutor:單線程線程池newScheduledThreadPool:支持

原创 Java併發編程:Java線程池核心ThreadPoolExecutor的使用和原理分析

文章目錄引出線程池Executor框架ThreadPoolExecutor詳解構造函數重要的變量線程池執行流程任務隊列workQueue任務拒絕策略線程池的關閉ThreadPoolExecutor創建線程池實例參考: 引出線程池 線程

原创 Java併發編程:ThreadLocal的使用以及實現原理解析

前言 前面的文章裏,我們學習了有關鎖的使用,鎖的機制是保證同一時刻只能有一個線程訪問臨界區的資源,也就是通過控制資源的手段來保證線程安全,這固然是一種有效的手段,但程序的運行效率也因此大大降低。那麼,有沒有更好的方式呢?答案是有的,既

原创 Java併發編程:synchronized、Lock、ReentrantLock以及ReadWriteLock的那些事兒

文章目錄前言synchronized用法修飾方法修飾實例方法修飾靜態方法同步代碼塊引出LockLock用法子類:ReentrantLock讀寫分離鎖:ReadWriteLockLock和synchronized比較 前言 多線程開發中

原创 Java併發編程:JMM (Java內存模型) 以及與volatile關鍵字詳解

文章目錄計算機系統的一致性Java內存模型內存模型的3個重要特徵原子性可見性有序性指令重排序volatile關鍵字保證可見性和防止指令重排不能保證原子性 計算機系統的一致性 在現代計算機操作系統中,多任務處理幾乎是一項必備的功能,因爲

原创 Java併發編程:線程的生命週期是個怎樣的過程?

前言 在日常開發過程中,如果我們需要執行一些比較耗時的程序的話,一般來說都是開啓一個新線程,把耗時的代碼放在線程裏,然後開啓線程執行。但線程是會耗費系統資源的,如果有多個線程同時運行,互相之間搶佔系統資源,那無疑會對系統造成極大的壓力

原创 Java併發編程:Java創建線程的三種方式

文章目錄引言創建線程的三種方式一、繼承Thread類二、實現Runnable接口三、使用Callable和Future創建線程三種方式的對比 引言 在日常開發工作中,多線程開發可以說是必備技能,好的程序員是一定要對線程這塊有深入瞭解的

原创 Java併發編程:什麼是線程安全,以及併發必須知道的幾個概念

廢話 衆所周知,在Java的知識體系中,併發編程是非常重要的一環,也是面試的必問題,一個好的Java程序員是必須對併發編程這塊有所瞭解的。爲了追求成爲一個好的Java程序員,我決定從今天開始死磕Java的併發編程,儘量彌補自己在這方面

原创 SpringCloud底層服務之間是怎麼相互調用的?

文章目錄概述一、業務場景介紹二、Spring Cloud核心組件:Eureka三、Spring Cloud核心組件:Feign四、Spring Cloud核心組件:Ribbon五、Spring Cloud核心組件:Hystrix六、S

原创 Java集合類:Vector

引言 之前的文章我們學習了一個集合類 ArrayList,今天講它的一個兄弟 Vector。 爲什麼說是它兄弟呢?因爲從容器的構造來說,Vector 簡直就是 ArrayList 的翻版,也是基於數組的數據結構,不同的是,Vector

原创 Java集合類:LinkedList

文章目錄前言初識LinkedList源碼解析添加元素刪除元素更改元素查詢元素內部類LinkedList 和 ArrayList 的對比 前言 上篇文裏講解了ArrayList ,它是基於List 接口來實現的,今天講解Java集合類中

原创 Java集合類:ArrayList

文章目錄前言源碼解析基本成員變量添加元素查詢元素修改元素刪除元素爲什麼用 "transient" 修飾數組變量總結 前言 今天學習一個Java集合類使用最多的類 ArrayList , ArrayList 繼承了 AbstractLi

原创 Java集合類:"隨機訪問" 的RandomAccess接口

引出RandomAccess接口 如果我們用Java做開發的話,最常用的容器之一就是List集合了,而List集合中用的較多的就是ArrayList 和 LinkedList 兩個類,這兩者也常被用來做比較。因爲最近在學習Java的集

原创 Java集合類:HashMap (基於JDK1.8)

文章目錄前言HashMap的數據結構深入源碼兩個參數成員變量四個構造方法插入數據的方法:put()哈希函數:hash()動態擴容:resize()節點樹化、紅黑樹的拆分節點樹化紅黑樹拆分總結心得 前言 今天我們來學習Java中較爲常用