天天看點

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

作者:是啊超ya

多核的機器,現在已經非常常見了。即使是一塊手機,也都配備了強勁的多核處理器。通過多程序和多線程的手段,就可以讓多個CPU同時工作,來加快任務的執行。 多線程,是程式設計中一個比較進階的話題。由于它涉及到共享資源的操作,是以在編碼時非常容易出現問題。Java的concurrent包,提供了非常多的工具,來幫助我們簡化這些變量的同步,但學習應用之路依然充滿了曲折。

一、多線程概念

之前學習的程式在沒有跳轉語句的前提下,都是由上至下依次執行,那現在想要設計一個程式,邊打遊戲邊聽歌,怎麼設計?

要解決上述問題,就需要使用多程序或者多線程來解決.

1. 并發與并行

并發:指兩個或多個事件在同一個時間段内發生。

并行:指兩個或多個事件在同一時刻發生(同時發生)。

在作業系統中,安裝了多個程式,并發指的是在一段時間内宏觀上有多個程式同時運作,這在單 CPU 系統中,每一時刻隻能有一道程式執行,即微觀上這些程式是分時的交替運作,隻不過是給人的感覺是同時運作,那是因為分時交替運作的時間是非常短的。

而在多個 CPU 系統中,則這些可以并發執行的程式便可以配置設定到多個處理器上(CPU),實作多任務并行執行,即利用每個處理器來處理一個可以并發執行的程式,這樣多個程式便可以同時執行。目前電腦市場上說的多核 CPU,便是多核處理器,核越多,并行處理的程式越多,能大大的提高電腦運作的效率。

注意:單核處理器的計算機肯定是不能并行的處理多個任務的,隻能是多個任務在單個CPU上并發運作。同理,線程也是一樣的,從宏觀角度上了解線程是并行運作的,但是從微觀角度上分析卻是串行運作的,即一個線程一個線程的去運作,當系統隻有一個CPU時,線程會以某種順序執行多個線程,這種情況稱之為線程排程。

2. 線程與程序

程序:是指一個記憶體中運作的應用程式,每個程序都有一個獨立的記憶體空間,一個應用程式可以同時運作多個程序;程序也是程式的一次執行過程,是系統運作程式的基本機關;系統運作一個程式即是一個程序從建立、運作到消亡的過程。

線程:線程是程序中的一個執行單元,負責目前程序中程式的執行,一個程序中至少有一個線程。一個程序中是可以有多個線程的,這個應用程式也可以稱之為多線程程式。

簡而言之:一個程式運作後至少有一個程序,一個程序中可以包含多個線程

3. 多線程原理

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

個人簡單了解:以前隻能順序運作一個程式,使用多線程可以同時運作多個程式

Java多線程無處不在,如伺服器、資料庫、應用。多線程可以有效提升計算和處理效率,大大提升吞吐量和可伸縮性,深得廣大程式員和公司的青睐。很多人學習完JavaSE/JavaEE之後想往更深入的技術進行探索,比如對大資料、分布式,高井發類的專題進行攻克時,立即遇到針對java lang包中線程類的學習,但線程類的學習并不像JDBC一樣簡單,學習曲線陡峭,多彎路與“坑”。要學習這些熱點技術, Java多線程技術避無可避。

多線程與高并發學習路線

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

有了學習路線,接下來咱們就要實戰學習了。小編特意為大家準備了一篇Java多線程程式設計核心與實戰的秘籍。一起來看一下吧~~~

第1章Java多線程技能

程序和多線程的概念及線程的優點使用多線程currentThread0方法isAlive0方法sleep0方法getld0方法停止線程暫停線程yield方法線程的優先級守護線程

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

本章介紹了Thread類的API,在使用這些API的過程中,會出現一些意想不到的情況,其實這也是多線程具有不可預知性的一個展現。學習和掌握這些常用情況,也就掌握了多線程開發的命脈與習性,是學習多線程更深層知識的基礎。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第2章對象及變量的并發通路

synchronized同步方法synchronized同步語句塊volatile關鍵字

通過本章學習,朋友們對關鍵字synchronized在使用上不再陌生,知道什麼時候使用它,它所解決的哪些問題是開發上的重點。學習完多線程同步後就可以有效控制線程間處理資料的順序性,及對處理後的資料進行有效值的保證,更好地對線程執行結果有正确的預期。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第3章線程間通信

等待/通知機制方法join的使用類ThreadLocal的使用類InheritableThreadLocal的使用

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

經過本章的學習,可以将以前分散的線程對象進行彼此的通信與協作,線程任務不再是單打獨鬥,更具有團結性,因為它們之間可以互相通信,就像指令官與執行者一樣。對任務的計劃規劃更加合理,不再是随機的和盲目的了。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第4章Lock的使用

使用ReentrantLock類使用ReentrantReadWriteLock類

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

在本章中完全可以使用Lock對象将synchronized關鍵字替換掉,而且其具有的獨特功能也是synchronized所不具有的。在學習并發時,Lock是synchronized關鍵字的進階,掌握Lock有助于學習并發包中源代碼的實作原理,在并發包中大量的類使用了Lock接口作為同步的處理方式。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第5章定時器Timer

定時器Timer的使用

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第5章講解了Timer定時器類,其内部實作就是使用的多線程技術。定時器的計劃任務執行是很重要的技術點,包括在Android開發時都會有深入的使用,是以會為讀者詳細講解。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第6章單例模式與多線程

立即加裁/餓漢模式”延遲加載/”懶漢模式”使用靜态内置類實作單例模式序列化與反序列化的單例模式實作使用static代碼塊實作單例模式使用enum枚舉資料類型實作單例模式完善使用enum枚舉實作單例模式

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

本章使用若幹案例來闡述單例模式與多線程結合時遇到的情況與解決方法。本章也複習了不同單例模式的使用,使得以後再遇到單例模式時,就能從容面對多線程環境的情況了。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

第7章拾遺增補

線程的狀态線程組使線程具有有序性SimpleDateFormat排線程安全線程中出現異常的處理線程組内處理異常線程異常處理的傳遞

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

本章彌補了前面幾個章節遺漏的技術空白點,這些示例是對多線程技術學習的補充,有助于更細化地了解多線程的細節。比如,了解線程的狀态後,完全可以對不同狀态下的線程正在做哪些事情了如指掌;學習了線程組後可以對線程的組織實施更有效的規劃;SimpleDateFormat類在遇到多線程時也會出現意想不到的異常。最後學習了線程在出現異常時的常用處理方式。

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

書簽介紹

java多線程你真的了解嗎?開發大佬用執行個體帶你深入學習,徹底掌握

好了,介紹就到這裡啦,因篇幅限制,小編在這裡無法全部展現,有需要免費擷取此份文檔的朋友,麻煩三連支援一下,私信小編回複【學習】即可~~~