原創】Java並發編程系列01|開篇獲獎感言

2020-12-12 酷扯兒

本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫

為什麼要學並發編程

我曾聽一個從事15年開發工作的技術人員說過,他剛工作時的並發編程第一原則就是不要寫並發程序。這個不寫並發程序的原則行得通的背景是那個時候基本都是單核處理器,系統並發量很低,藉助資料庫和類似Tomcat這種中間件就可以解決並發問題。

如今硬體的驅動和網際網路行業的飛速發展,64核的處理器已經是很常見了,大型互聯廠商的系統並發量輕鬆過百萬,傳統的中間件和資料庫肯定是不能幫我們遮風避雨了,我們只能通過並發編程來解決這些問題。

所以,並發編程已經成為一項必備技能

並發編程是Java語言的重要特性之一,它能使複雜的代碼變得更簡單,從而極大地簡化複雜系統的開發。

並發編程可以充分發揮多處理器系統的強大計算能力,隨著處理器數量的持續增長,如何高效的並發變得越來越重要。

說白了,對我們程式設計師來說,並發編程在日常工作中是都要用到的,就算目前沒用到將來也要用到,工作中用不到面試也要用到。

如何學習並發編程

並發編程的學習確實有難度

《Java並發編程實戰》中這麼說,「編寫正確的程序難,編寫正確的並發程序更難」。

並發編程中涉及作業系統、CPU、內存等等多方面的知識,如果某一塊知識缺乏,理解起來自然會有困難。由於涉及知識較多,學習起來很容易摸不著頭緒,學習了一個點但是不能跟其他點聯繫起來。

理清脈絡,系統學習

並發編程的知識比較零散,相關度很低,總是給人一種感覺,「學習了很多相關知識,可還是沒搞懂是怎麼回事」。那麼,接下來就由我跟你一起來理一理Java並發編程的脈絡。

1.並發理論:並發編程要解決的三大問題;介紹可見性與有序性問題的根源重排序;學習Java內存模型(JMM),理解JMM如何解決這些問題以實現並發編程的。

2.並發關鍵字:深入volatile、synchronized、final關鍵字的作用,都解決了什麼問題,以及其實現原理。

3.並發基礎:並發編程中用到的一些基本概念,如:死鎖、飢餓與公平等;線程的創建、運行、調度。

4.CAS原子操作:並發編程的基礎與核心CAS的實現原理,以及Java中的CAS原子操作。

5.Lock體系:JDK的Lock對於synchronized有哪些優勢;Lock如何通過AQS與LockSupport工具實現的;Lock的使用。

6.並發工具:介紹java.util.concurrent包下提供的並發工具倒計時器CountDownLatch、循環柵欄CyclicBarrier、資源訪問控制Semaphore、數據交換Exchanger的用法,並深入分析實現原理。

7.並發容器:介紹java.util.concurrent包下提供的並發容器ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue、ThreadLocal、及阻塞隊列的用法,並深入分析實現原理。

8.線程池(Executor體系):介紹線程池ThreadPoolExecutor和ScheduledThreadPoolExecutor的用法,分析線程池執行流程和原理。

Java並發編程思維導圖

從今天起,我會通過一個專題的系列文章來系統地講解Java並發編程知識。如下給出Java並發編程的知識結構,也是這個系列文章的思路。

相關焦點

  • 「原創」Java並發編程系列09|基礎乾貨
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文為何適原創並發編程系列第9篇。現在,我們進入正題:介紹並發編程的基礎性概念。
  • 「原創」Java並發編程系列02|並發編程三大核心問題
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫寫在前面編寫並發程序是比較困難的,因為並發程序極易出現Bug,這些Bug有都是比較詭異的,很多都是沒辦法追蹤,而且難以復現。
  • 「原創」Java並發編程系列28|Copy-On-Write容器
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫正文前面兩篇講了並發編程中線程安全HashMap:ConcurrentHashMap
  • JAVA並發編程:並發問題的根源及主要解決方法
    而在java中,不變性變量即通過final修飾的變量,如String,Long,Double等類型都是Immutability的,它們的內部實現都是基於final關鍵字的。那這又和並發編程有什麼關係呢?其實啊,並發問題很大部分原因就是因為線程切換破壞了原子性,這又導致線程隨意對變量的讀寫破壞了數據的一致性。
  • 「原創」Java並發編程系列18|讀寫鎖(下)
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文為何適原創並發編程系列第 18 篇,文末有本系列文章匯總。上篇為【原創】Java並發編程系列17 | 讀寫鎖八講(上),沒看過的可以先看看。本文是下篇,從「源碼分析寫鎖的獲取與釋放」開始。7.
  • 「原創」Java並發編程系列06|你不知道的final
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫final在Java中是一個保留的關鍵字,可以修飾變量、方法和類。那麼fianl在並發編程中有什麼作用呢?本文就在對final常見應用總結基礎上,講解final並發編程中的應用。
  • 「原創」Java並發編程系列29|ConcurrentLinkedQueue
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫J.U.C 為常用的集合提供了並發安全的版本,前面講解了 map 的並發安全集合 ConcurrentHashMap,List 並發安全集合 CopyOnWriteArrayList,Set 並發安全集合
  • 「原創」Java並發編程系列14|AQS源碼分析
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文為何適原創並發編程系列第 14 篇,文末有本系列文章匯總。AbstractQueuedSynchronizer是Java並發包java.util.concurrent的核心基礎組件,是實現Lock的基礎。
  • NO.001- 簡說 Java 並發編程史
    這篇文章是Java並發編程思想系列的第一篇,主要從理解Java並發編程歷史的原因和Java並發演進過程兩部分,以極簡地回溯並發編程的歷史,幫助大家從歷史這個角度去了解一門語言一個特性的演進。對歷史理解的越多,思考的越多,未來的方向就會更加堅定。我是誰?從哪來?到哪去?
  • Java並發編程系列20|StampedLock源碼解析
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文為何適原創並發編程系列第 20 篇,文末有本系列文章匯總。上一篇介紹了StampedLock存在的意義以及如何使用,按照這個系列的風格大家也應該猜到了,這一篇就是的源碼分析。
  • 「原創」Java並發編程系列03|重排序-可見性和有序性問題根源
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫思維導圖寫在前面並發編程的三大問題:原子性、可見性、有序性。從java原始碼到最終實際執行的指令序列,會分別經歷下面三種重排序:編譯器優化的重排序。編譯器在不改變單線程程序語義的前提下,可以重新安排語句的執行順序。指令級並行的重排序。
  • 「原創」Java並發編程系列33|深入理解線程池(上)
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫並發編程必不可少的線程池,接下來分兩篇文章介紹線程池,本文是第一篇。介紹1.1 使用場景並發編程可以高效利用CPU資源,提升任務執行效率,但是多線程及線程間的切換也伴隨著資源的消耗。當遇到單個任務處理時間比較短,但需要處理的任務數量很大時,線程會頻繁的創建銷毀,大量的時間和資源都會浪費在線程的創建和銷毀上,效率很低。
  • Java並發編程系列23|循環屏障CyclicBarrier
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫本篇介紹第二個並發工具類CyclicBarrier,CyclicBarrier的字面意思是可循環使用(Cyclic)的屏障(Barrier),分以下部分介紹:
  • 「原創」Java並發編程系列36|FutureTask
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫線程池源碼中出現了很多Callable、Future、FutureTask等以前沒介紹過的接口,尤其是線程池提交任務時總是把任務封裝成FutureTask,今天就來為大家解惑:
  • Java並發編程系列21|Condition-Lock的等待通知
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫我們知道 synchronized 鎖通過 Object 類的 wait()和 notify()方法實現線程間的等待通知機制,而比 synchronized 更靈活 Lock 鎖同樣也有實現等待通知機制的方式
  • Alibaba架構師從零開始,一步一步帶你進入並發編程的世界
    簡介並發與線程安全的基本概念構建與組合線程安全類的技術如何利用java.util.concurrent中的並發構建塊如果你是一名並發編程初學者,建議按照順序閱讀本書,並按照書中的例子進行編碼和實戰。如果你有一定的並發編程經驗,可以把本書當做一個手冊, 直接看需要學習的章節。以下是各章節的基本介紹。第l章介紹Java並發編程的挑戰,向讀者說明進入並發編程的世界可能會遇到哪些問題,以及如何解決。
  • Java面試熱點:深入學習並發編程中的synchronized(後三章)
    =1, args_size=1 0: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #4 // String a 5: invokevirtual #5 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable
  • 動力節點Java學院2021年Java學習路線圖最新出爐啦
    Java在程式語言排行榜中一直牢牢佔據榜首位置,幾乎所有的大中型網際網路的應用系統在伺服器端開發首選都是Java編程,正因如何吸引這不少年輕人投入該行業,Java雖不想其它程式語言那麼複雜,但是知識體系還是很龐大的,因此想要學好並非容易之事,不少想要跨入Java編程行業的同學們通過網絡搜索各式各樣的學習資料
  • 導演發正版歌詞,肖戰獲獎感言4字心疼
    楔子近日,《餘生請多指教》的導演發布了正版的歌詞,也就是肖戰、楊紫在《星光大賞》的舞臺上演唱的那三首歌的歌詞,但是,在我看來,這還不是最讓我感懷的,因為最動情處莫過於在舞臺最後肖戰的獲獎感言,尤其是其中的4個字分外心疼,並讓無數粉絲心緒悵然,猶如一個氣球被一根針忽然挑破了,那是一種難過之中的不安
  • 跟我學java編程—Java邏輯運算符
    示例1:邏輯運算符在D盤Java目錄下,新建「LogicSample.java」文件。用記事本打開「LogicSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示邏輯運算符的用法。類似語句「bJudge = !