學習極客時間上的《Java併發編程實戰》課程之餘,結合自己的理解整理一部分筆記以鞏固知識。 併發編程的起源 1.硬件設備發展的核心矛盾:CPU、內存、I/O設備三者間存在的速度差異。根據木桶原理,程序整體性能最終受制於速度最慢的I/O設備
1 談談線程池 在之前,我們在需要使用線程的時候就去創建一個線程,可謂是非常簡便了。但是,當併發的線程數量多了之後,頻繁創建線程會令系統的效率大大下降。 那有沒有辦法可以令我們複用線程?線程在執行完一個任務之後,不會銷燬,進而執行
1 什麼是 ThreadLocal? ThreadLocal 類用於提供線程內部的局部變量,變量在多線程環境下訪問(通過 get 和 set 方法訪問)時能保證各個線程的變量相對獨立於其他線程內的變量。ThreadLocal 實例
樂觀鎖是一種輕量級鎖,在併發競爭不激烈的場景下,我們可以使用樂觀鎖來保證線程安全。 我們來看一個場景:定時job如何做併發控制,保證只有一臺服務器執行? 這個場景其實很適合使用樂觀鎖,因爲我們的跑job的服務器節點不會太多,可能就幾臺,幾
什麼是AQS 字面上來看,AQS是jdk1.5加入的java.util.concurrent.locks.AbstractQueuedSynchronizer類,類名翻譯成中文就是抽象的隊列同步器。由大名鼎鼎的Doug Lea李大
文章目錄1 Lock1.1 lock() 方法1.2 tryLock()方法與 tryLock(long time, TimeUnit unit)方法1.3 lockInterruptibly() 方法2 Reentran
什麼是阻塞隊列(BlockingQueue)? 文章目錄什麼是阻塞隊列(BlockingQueue)?項目環境1.阻塞隊列(BlockingQueue)2.生產者消費者模式3.阻塞隊列的優點3.1 降低多線程開發的難度3.2 隔離
爲什麼 HashMap 鏈表長度超過8才轉爲紅黑樹? 文章目錄爲什麼 HashMap 鏈表長度超過8才轉爲紅黑樹?項目環境1.爲什麼要轉紅黑樹?2.爲什麼不一開始就用紅黑樹?3.轉換閾值 8 是怎麼來的?4.總結5.參考 項目環境
爲什麼說本質上只有一種實現線程的方式? 文章目錄爲什麼說本質上只有一種實現線程的方式?前言項目環境1.常見的幾種線程實現方式1.1 實現 Runnable 接口1.2 繼承 Thread 類1.3 使用線程池創建1.4 有返回值的
同樣是線程安全,ConcurrentHashMap 和 Hashtable 區別? 文章目錄同樣是線程安全,ConcurrentHashMap 和 Hashtable 區別?前言1.出現的版本不同2.實現線程安全的方式不同3.性能
Java 中常見的阻塞隊列有哪些? 文章目錄Java 中常見的阻塞隊列有哪些?前言項目環境1.ArrayBlockingQueue2.LinkedBlockingQueue3.SynchronousQueue4.PriorityB
Java 阻塞隊列中的常用方法及區別 文章目錄Java 阻塞隊列中的常用方法及區別前言項目環境1.第一組方法1.1 add 方法1.2 remove 方法1.3 element 方法2.第二組方法2.1 offer 方法2.2 p
1.嘗試使用外部線程捕獲子線程運行時錯誤 給出以下例子,我想問題是線程t1運行期間拋出的異常能夠被捕獲嗎?(這是一個相當好的問題~) /** * @author Fisherman */ public class TempT
AbstractQueuedSynchronizer源碼分析(一)1、父類:AbstractOwnableSynchronizer2、AbstractQueuedSynchronizer的靜態內部類Node3、AbstractQu
AbstractQueuedSynchronizer源碼分析(二):獨佔鎖的獲取與釋放1、典型實現:ReentrantLock2、AbstactQueuedSynchronizer不響應中斷的獨佔鎖方法介紹AbstactQueue