原创 高併發編程-HashMap深入解析

底層實現原理在JDK1.8以前版本中,HashMap的實現是數組+鏈表,它的缺點是即使哈希函數選擇的再好,也很難達到元素百分百均勻分佈,而且當HashMap中有大量元素都存到同一個桶中時,這個桶會有一個很長的鏈表,此時遍歷的時間複雜度就是O

原创 高併發編程-happens-before

happens-before是Java內存模型中定義的兩個操作之間的偏序關係,即如果操作A在操作B之前先發生,那麼操作A產生的操作結果,操作B可以觀察到,或者說操作A的結果影響到操作B。筆者認爲Java內存模型中的這種與生俱來的原則實現了可

原创 高併發編程-volatile詳解

主內存與工作內存在介紹volatile之前,先簡單瞭解一下Java內存模型。在Java虛擬機規範中試圖定義一種Java內存模型(Java Memory Model,JMM)來屏蔽各個硬件平臺和操作系統的內存訪問差異,以實現讓Java程序在各

原创 高併發編程-鎖優化詳解

Java在語言上支持了鎖的特性,在很多常用類的實現中也使用了鎖,對於Java開發者來說就可以很方便的使用這些鎖及常用類。但是,隨着鎖的頻繁使用及錯用,隨之而來的就是程序執行效率變低、應用變的緩慢。爲了提高線程對共享數據訪問的效率,HotSp

原创 高併發編程-synchronized深入解析深挖

共享數據與鎖Java虛擬機的運行時數據區中的堆和方法區是所有線程共享的區域,如果多個線程需要同時使用共享的對象或類變量,則必須要正確協調它們對數據的訪問。否則,程序將具有不可預測的行爲。爲了協調多個線程之間的共享數據訪問,Java虛擬機將鎖

原创 使用Spring Data Redis實現數據緩存的方法

目前在系統架構設計中使用Redis實現緩存,這篇文章主要介紹了使用Spring Data Redis實現數據緩存的方法,具有一定的參考價值,需要的朋友可以參考下 引言 目前很多系統爲了解決數據讀寫的性能瓶頸,在系

原创 高併發編程-ReentrantReadWriteLock深入解析

要點解說ReentrantLock在併發情況下只允許單個線程執行受保護的代碼,而在大部分應用中都是讀多寫少,所以,如果使用ReentrantLock實現這種對共享數據的併發訪問控制,將嚴重影響整體的性能。ReentrantReadWrite

原创 高併發編程-Condition深入解析

概述Condition接口位於java.util.concurrent.locks包下,實現類有 AbstractQueuedLongSynchronizer.ConditionObject和 AbstractQueuedSynchroni