原创 生產者-消費者模式:用流水線思想提高效率

話題:生產者-消費者模式:用流水線思想提高效率 Worker Thread模式類比的是工廠裏車間工人的工作模式。但其實在現實世界,工廠裏還有一種流水線的工作模式,類比到編程領域,就是生產者-消費者模式。 生產者-消費者模式在編程領

原创 Worker Thread模式:如何避免重複創建線程

話題:Worker Thread模式:如何避免重複創建線程? 在上一篇文章中,我們介紹了一種最簡單的分工模式——Thread-Per-Message模式,對應到現實世界,其實就是委託代辦。這種分工模式如果用Java Thread實

原创 Thread-Per-Message模式:one to one 最簡單實用的分工方法

話題:Thread-Per-Message模式:最簡單實用的分工方法 我們曾經把併發編程領域的問題總結爲三個核心問題:分工、同步和互斥。其中,同步和互斥相關問題更多地源自微觀,而分工問題則是源自宏觀。我們解決問題,往往都是從宏觀入

原创 其他多線程設計模式

觀察者設計模式觀察線程的生命週期 //使用觀察者設計模式觀察線程的生命週期 被觀察者是Thread public abstract class ObservableRunnable implements Runnable {

原创 Two Phase Termination 設計模式:兩階段終止模式

話題:兩階段終止模式:如何優雅地終止線程? 啓動多線程去執行一個異步任務。既啓動,那又該如何終止呢?今天咱們就從技術的角度聊聊如何優雅地終止線程,正所謂有始有終。 線程執行完或者出現異常就會進入終止狀態。這樣看,終止一個線程看上去

原创 Balking模式:再談線程安全的單例模式

話題:Balking模式:再談線程安全的單例模式 上一篇文章中,我們提到可以用**“多線程版本的if”**來理解Guarded Suspension模式,不同於單線程中的if,這個“多線程版本的if”是需要等待的,而且還很執着,必

原创 Copy-on-Write模式:寫時複製

話題:Copy-on-Write模式:不是延時策略的COW 在上一篇文章中我們講到Java裏String這個類在實現replace()方法的時候,並沒有更改原字符串裏面value[]數組的內容,而是創建了一個新字符串,這種方法在解

原创 設計模式模塊答疑

話題:設計模式模塊熱點問題答疑 多線程設計模式是前人解決併發問題的經驗總結,當我們試圖解決一個併發問題時,首選方案往往是使用匹配的設計模式,這樣能避免走彎路。同時,由於大家都熟悉設計模式,所以使用設計模式還能提升方案和代碼的可理解

原创 Guarded Suspension模式:等待喚醒機制

話題:Guarded Suspension模式:等待喚醒機制的規範實現 前不久,同事小灰工作中遇到一個問題,他開發了一個Web項目:Web版的文件瀏覽器,通過它用戶可以在瀏覽器裏查看服務器上的目錄和文件。這個項目依賴運維部門提供的

原创 Java併發編程實戰第二部分學習記錄

14 | Lock和Condition(上):隱藏在併發包中的管程 併發編程領域,有兩大核心問題:一個是互斥,即同一時刻只允許一個線程訪問共享資源;另一個是同步,即線程之間如何通信、協作。這兩大問題,管程都是能夠解決的。Java

原创 Java併發編程實戰第一部分學習記錄

01 | 可見性、原子性和有序性問題:併發編程Bug的源頭 併發程序幕後的故事 源頭之一:緩存導致的可見性問題 源頭之二:線程切換帶來的原子性問題 源頭之三:編譯優化帶來的有序性問題 總結 02 | Java內存模型:看

原创 第 7 章 Google Protobuf

7.1 編碼和解碼的基本介紹 編寫網絡應用程序時,因爲數據在網絡中傳輸的都是二進制字節碼數據,在發送數據時就需要編碼,接收數據時就需要解碼 codec(編解碼器) 的組成部分有兩個:decoder(解碼器)和 encode

原创 第 10 章 Netty 核心源碼剖析②

Pipeline Handler HandlerContext 創建源碼剖析 ChannelPipeline 調度 handler 的源碼剖析 源碼剖析目的 Netty 中的 ChannelPipeline 、 ChannelHa

原创 第 9 章 TCP 粘包和拆包及解決方案

9.1 TCP 粘包和拆包基本介紹 TCP 是面向連接的,面向流的,提供高可靠性服務。收發兩端(客戶端和服務器端)都要有一一成對的 socket,因此,發送端爲了將多個發給接收端的包,更有效的發給對方,使用了優化方法(Nagl

原创 第 8 章 Netty 編解碼器和 handler 的調用機制

8.1 基本說明 netty 的組件設計:Netty 的主要組件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等 ChannelHandler 充