原创 深讀源碼-java同步系列之Phaser源碼解析

問題 (1)Phaser是什麼? (2)Phaser具有哪些特性? (3)Phaser相對於CyclicBarrier和CountDownLatch的優勢? 簡介 Phaser,翻譯爲階段,它適用於這樣一種場景,一個大任務可以分爲多個階段

原创 深讀源碼-java線程系列之線程模型

問題 (1)線程類型有哪些? (2)線程模型有哪些? (3)各語言使用的是哪種線程模型? 簡介 在Java中,我們平時所說的併發編程、多線程、共享資源等概念都是與線程相關的,這裏所說的線程實際上應該叫作“用戶線程”,而對應到操作系統,還有

原创 深讀源碼-java線程系列之創建線程的8種方式

問題 (1)創建線程有哪幾種方式? (2)它們分別有什麼運用場景? 簡介 創建線程,是多線程編程中最基本的操作,大概有8種創建線程的方式,你知道嗎? 繼承Thread類並重寫run()方法 public class CreatingTh

原创 深讀源碼-java線程系列之線程池深入解析——未來任務執行流程

簡介 前面我們一起學習了線程池中普通任務的執行流程,但其實線程池中還有一種任務,叫作未來任務(future task),使用它您可以獲取任務執行的結果,它是怎麼實現的呢? 建議學習本章前先去看看之前寫的《深讀源碼-java線程系列之自己手

原创 Curator實現分佈式鎖

簡介 分佈式鎖服務宕機, ZooKeeper 一般是以集羣部署, 如果出現 ZooKeeper 宕機, 那麼只要當前正常的服務器超過集羣的半數, 依然可以正常提供服務 持有鎖資源服務器宕機, 假如一臺服務器獲取鎖之後就宕機了, 那麼就會導

原创 深讀源碼-java線程系列之線程的生命週期

簡介 大家都知道線程是有生命週期,但是網上幾乎沒有一篇文章講得是完全正確的。 常見的錯誤有:就緒狀態、運行中狀態(RUNNING)、死亡狀態、中斷狀態、只有阻塞沒有等待狀態、流程圖亂畫等,最常見的錯誤就是說線程只有5種狀態。 今天這篇文章

原创 深讀源碼-java同步系列之zookeeper分佈式鎖

問題 (1)zookeeper如何實現分佈式鎖? (2)zookeeper分佈式鎖有哪些優點? (3)zookeeper分佈式鎖有哪些缺點? 簡介 zooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,它可以爲分佈式應用提供

原创 深讀源碼-java同步系列之redis分佈式鎖進化史

問題 (1)redis如何實現分佈式鎖? (2)redis分佈式鎖有哪些優點? (3)redis分佈式鎖有哪些缺點? (4)redis實現分佈式鎖有沒有現成的輪子可以使用? 簡介 Redis(全稱:Remote Dictionary Se

原创 深讀源碼-java同步系列之CyclicBarrier源碼解析

問題 (1)CyclicBarrier是什麼? (2)CyclicBarrier具有什麼特性? (3)CyclicBarrier與CountDownLatch的對比? 簡介 CyclicBarrier,迴環柵欄,它會阻塞一組線程直到這些線

原创 深讀源碼-java線程系列之線程池深入解析——生命週期

簡介 上一章我們一起重溫了下線程的生命週期(六種狀態還記得不?),但是你知不知道其實線程池也是有生命週期的呢?! 問題 (1)線程池的狀態有哪些? (2)各種狀態下對於任務隊列中的任務有何影響? 先上源碼 其實,在我們講線程池體系結構的時

原创 深讀源碼-java線程系列之自己手寫一個線程池

問題 (1)自己動手寫一個線程池需要考慮哪些因素? (2)自己動手寫的線程池如何測試? 簡介 線程池是Java併發編程中經常使用到的技術,那麼自己如何動手寫一個線程池呢?本文將手把手帶你寫一個可用的線程池。 屬性分析 線程池,顧名思義它首

原创 深讀源碼-java線程系列之總結篇

簡介 線程系列我們基本就學完了,這一個系列我們基本都是圍繞着線程池在講,其實關於線程還有很多東西可以講,後面有機會我們再補充進來。 重要知識點 直接上圖,看着這張圖我相信你能夠回憶起很多東西,也可以看着這張圖來自己提問自己回答,當然,也可

原创 深讀源碼-java線程系列之自己手寫一個線程池進階版

問題 (1)自己動手寫的線程池如何支持帶返回值的任務呢? (2)如果任務執行的過程中拋出異常了該怎麼處理呢? 簡介 上一章我們自己動手寫了一個線程池,但是它是不支持帶返回值的任務的,那麼,我們自己能否實現呢?必須可以,今天我們就一起來實現

原创 MySQL性能優化(五):分區

一 分區簡介 分區是根據一定的規則,數據庫把一個表分解成多個更小的、更容易管理的部分。就訪問數據庫應用而言,邏輯上就只有一個表或者一個索引,但實際上這個表可能有N個物理分區對象組成,每個分區都是一個獨立的對象,可以獨立處理,可以作爲表的一

原创 深讀源碼-java線程系列之線程池深入解析——構造方法

簡介 ThreadPoolExecutor的構造方法是創建線程池的入口,雖然比較簡單,但是信息量很大,由此也能引發一系列的問題,同樣地,這也是面試中經常被問到的問題,下面只是列舉了一部分關於ThreadPoolExecutor構造方法的問