1. 程式人生 > 實用技巧 >2020最有必要學習筆記:Java非同步程式設計藍光版筆記(含Go語言)

2020最有必要學習筆記:Java非同步程式設計藍光版筆記(含Go語言)

通常Java開發人員喜歡使用同步程式碼編寫程式,因為這種請求(request) /響應(response) 的方式比較簡單,並且比較符合程式設計人員的思維習慣;這種做法很好,直到系統出現效能瓶頸。在使用同步程式設計方式時,由於每個執行緒同時只能發起一個請求 並同步等待返回, 所以為了提高系統性能,此時我們就需要引入更多的執行緒來實現並行化處理。但是多執行緒下對共享資源進行訪問時,不可避免會引入資源爭用和併發問題;另外,作業系統層面對執行緒的個數是有限制的,不可能通過無限增加執行緒數來提供系統性能;而且,使用同步阻塞的程式設計方式還會浪費資源,比如發起網路IO請求時,呼叫執行緒就會處於同步阻塞等待響應結果的狀態,而這時候呼叫執行緒明明可以去做其他事情,等網路IO響應結果返回後再對結果進行處理。

可見通過增加單機系統執行緒個數的並行程式設計方式並不是“靈丹妙藥”。通過編寫非同步、非阻塞的程式碼,則可以使用相同的底層資源將執行切換到另一個活動任務,然後在非同步處理完成後再返回到當前執行緒繼續處理,從而提高系統性能。

非同步程式設計是可以讓程式並行執行的一種手段,其可以讓程式中的一個工作單元與主應用程式執行緒分開獨立執行,並且在工作單元執行結束後,會通知主應用程式執行緒它的執行結果或者失敗原因。使用非同步程式設計可以提高應用程式的效能和響應能力等。

比如當呼叫執行緒使用非同步方式發起網路IO請求後,呼叫執行緒就不會同步阻塞等待響應結果,而是在記憶體儲存請求上下文後,馬上返回去做其他事情,等網路IO響應結果返回後再使用IO執行緒通知業務執行緒響應結果已經返回,由業務執行緒對結果進行處理。可見,非同步呼叫方式提高了執行緒的利用率,讓系統有更多的執行緒資源來處理更多的請求。比如在移動應用程式中,在使用者操作移動裝置螢幕發起請求後,如果是同步等待後臺伺服器返回結果,則當後臺服務操作非常耗時時,就會造成使用者看到移動裝置螢幕凍結(一 直處於請求處理中),在結果返回前,使用者不能操作移動裝置的其他功能,這對使用者體驗非常不好。而使用非同步程式設計時,當發起請求後,呼叫執行緒會馬上返回,具體返回結果會通過UI執行緒非同步進行渲染,且在這期間使用者可以使用移動裝置的其他功能。

今天分享這份學習筆記就是一份Java非同步程式設計的頂級教程筆記!

由於筆記的內容過多,下面只能為大家展示部分內容,完整藍光版免費的獲取方式在文末!

詳細章節目錄

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第1章認識非同步程式設計

本章主要介紹非同步程式設計的概念與作用,Java中 非同步程式設計的場景以及不同非同步程式設計場景應使用什麼技術來實現。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第2章顯式使用執行緒和執行緒池實現非同步程式設計

本章主要探討如何顯式地使用執行緒和執行緒池實現非同步程式設計,這包含如何顯式使用執行緒實現非同步程式設計以及使用執行緒程式設計的缺點,如何顯式使用執行緒池實現非同步程式設計以及執行緒池實現原理。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第3章基於JDK中的Future實現非同步程式設計

本章主要講解如何使用JDK中的Future實現非同步程式設計,這包含如何使用FutureTask實現非同步程式設計及其內部實現原理;如何使用CompletableFuture實現非同步程式設計及其內部實現原理,以及CompletableFuture與JDK Stream如何完美結合的。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第4章Spring框架中的非同步執行

在Spring Framework中分別使用TaskExecutor和TaskScheduler介面提供非同步執行和任務排程的抽象,本章我們著重講解基於TaskExecutor支撐的註解@Asyne是如何實現非同步處理的。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第5章基於反應式程式設計實現非同步程式設計

本章主要講解如何使用反應式程式設計實現非同步程式設計,其包含了什麼是反應式程式設計,為何需要反應式程式設計,反應式程式設計特點與價值是什麼,以及如何基於反應式程式設計實現庫RxJava與Reactor實現非同步程式設計。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第6章Web Servlet的非同步非阻塞處理

本章主要探討Servlet3.0規範前的同步處理模型和缺點,Servlet3.0規範提供的非同步處理能力與Servlet3.1規範提供的非阻塞I0能力,以及Spring MVC中提供的非同步處理能力。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第7章Spring WebFlux的非同步非阻塞處理

本章主要講解Spring框架5.0中引入的新的WebFlux技術棧,並介紹其存在的價值與意義、併發模型與適用場景、如何基於WebFlux實現非同步程式設計,以及其內部的實現原理。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第8章高效能非同步程式設計框架和中介軟體

本章主要介紹一些高效能非同步程式設計框架和中介軟體,這包含非同步、基於事件驅動的網路程式設計框架一Netty; 高效能RPC框架一Apache Dubbo;高效能執行緒間訊息傳遞庫一Disruptor;非同步、分散式、基於訊息驅動的框架一Akka; 高效能分散式訊息框架一Apache RocketMQ。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

第9章Go語言的非同步程式設計能力

本章主要講解Go語言的非同步程式設計能力,這包含Go語言的執行緒模型,以及如何使用原語goroutine與channel實現非同步程式設計,最後基於goroutine與channel構建了一個支援回壓、非同步程式設計的管道。

2020最有必要科技:Java非同步程式設計藍光筆記(含Go語言)

有需要藍光版Java非同步程式設計筆記的朋友:

——————點贊+評論文章,關注我之後掃碼獲取。