原创 一千萬個數高效求和

前言 今天看到了一道面試題 一千萬個數,如何高效求和? 看到這個題中的“高效求和”,第一反應想到了JDK1.8提供的LongAdder類的設計思想,就是分段求和再彙總。也就是開啓多個線程,每個線程負責計算一部分,所以線程都計算

原创 深度解析CopyOnWriteArrayList,線程安全的ArrayList

前言 ArrayList是線程不安全的,這點毋庸置疑。因爲ArrayList的所有方法既沒有加鎖,也沒有進行額外的線程安全處理。而Vector作爲線程安全版的ArrayList,存在感總是比較低。因爲無論是add、remove還是

原创 ConcurrentHashMap底層結構與實現原理

前言 HashMap是一個非常優秀的類,使用也非常頻繁。唯一的遺憾就是HashMap不是線程安全的。 前置閱讀: HashMap底層結構與實現原理 HashMap多線程擴容導致死循環解析(JDK1.7) 理解了HashMap,

原创 深度解析阻塞隊列LinkedBlockingQueue

前言 關於阻塞隊列的使用,其實之前的文章已經提到過:三種方式實現生產者-消費者模型,最後一種方式就是用阻塞隊列實現的。仔細觀察會發現,前兩種也是在用wait/notify和ReentrantLock/Condition模擬阻塞隊列

原创 併發工具Phaser、Exchanger使用

前言 Phaser是JDK1.7提供的一種同步工具,是可重用的同步屏障,其功能類似於CyclicBarrier和CountDownLatch,但支持更靈活的用法。本篇主要講解Phaser、Exchanger兩種工具的用法。 其更加

原创 如何獲取子線程的執行結果

前言 博主以前面試的時候,真真切切的被問過這樣一道題: 如何獲取子線程的執行結果? 總所周知,在單線程情況下,想獲取線程執行結果很簡單,只需要寫類似的代碼即可: Object result = xxx.getXxx(); 但

原创 深度解析阻塞隊列ArrayBlockingQueue

前言 前一篇 深度解析阻塞隊列LinkedBlockingQueue 從底層源碼和結構原理入手,較爲深入的講解了由單鏈表實現的阻塞隊列LinkedBlockingQueue。本篇所要講解的依然是阻塞隊列,阻塞還是那個阻塞,隊列還是

原创 MySQL優化:索引

前言 索引是關係型數據庫優化時最常見、成本最低的一種優化方式。 在關係數據庫中,索引是一種單獨的、物理的對數據庫表中一列或多列的值進行排序的一種存儲結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏

原创 深度解析優先級隊列PriorityQueue

前言 從學習隊列(Queue)的第一天起,我們就知道隊列是滿足FIFO(後進先出)的。但是所有的隊列都是這樣嗎? 很遺憾,不是,今天所講解的優先隊列PriorityQueue就不滿足FIFO。 優先隊列 優先隊列是計算機科學中的

原创 深度解析延遲隊列DelayQueue

前言 有時候,我們有一些任務需要“稍後”來做,比如一些連接需要空閒一段時間後再關閉,session需要空閒一段時間後自動退出。這個時候就需要一些可以延遲執行任務的工具。DelayQueue(延遲隊列)就是一個可以實現類似功能的工具

原创 圖解數據結構:數組和單鏈表

前言 數據結構始終是計算機科學繞不開的話題,是計算機中存儲、組織數據的方式。學習數據結構能讓我們明白,如何更高效的存、取數據。編寫程序的目的就是爲了處理數據,處理數據本質上就是存、取、運算。 本篇從最簡單的數據結構入手,講解數組和

原创 圖解數據結構:棧和隊列

前言 閱讀此篇之前,強烈建議先仔細閱讀上一篇 圖解數據結構:數組和單鏈表 ,會有事半功倍的效果,並且此篇的代碼,基本上是複用上一篇的實現。 上一篇主要講解了數組和鏈表這兩種線性結構的特點、區別、時間複雜度分析等。對數組和鏈表的劃分

原创 ThreadLocal到底是啥

前言 相信很多同學都聽過ThreadLocal,即使沒用過也聽過。但是要仔細一問ThreadLocal是個啥,很多同學也不一定能說清楚。本篇博客就是爲了回答關於ThreadLocal的一系列靈魂拷問:ThreadLocal是個什麼