高並發第一彈:准備階段 了解高並發
首先需要知道什么並發, 什么是高並發.
並發:
關於並發的學習,可以從JDK提供的並發包為核心開始,許多其他的類和封裝都是對其進行擴展或者補充,我們來看一下Java並發包(java.util.concurrent包,簡稱J.U.C)的構成:
J.U.C核心由5大塊組成:atomic包、locks包、collections包、tools包(AQS)、executor包(線程池)。大家平時遇到許多並發相關的類都可以從這里找到。但是呢,要想系統的掌握並發,不能是打開J.U.C這個包,挨個類去看,這里只是提供了五大塊,代表核心的五個方向。要想系統的學習並發,還需要從並發的角度學習,過程中覆蓋J.U.C的這些知識。:
這個之前呢,還需要對Java並發的基礎進行細致的學習,比如CPU緩存和Java內存模型(JMM),許多關鍵字比如volatile、synchronized等的特性都是在JMM里規定好的。
其實我們講的都是兩部分里的第一部分:並發。那么並發和高並發到底有什么區別呢?
當我們說多線程並發時,其實我們更多的是討論多個線程操作了相同的資源,這時我們討論點更多的是落在保證線程安全以及合理分配和使用資源上。而高並發主要指系統運行過程中遇到“短時間內遇到大量操作請求”的情況,主要發生在系統集中收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。當我們說高並發時,我們談的是是如何提高現有程序的性能,更多的是對高並發場景的一些解決方案,思路啦、手段等等。如果高並發處理不好,不僅僅降低了用戶的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。這里呢,我直接給出高並發場景通常都會考慮的一些解決思路和手段:
如何有效的准備面試中並發類問題,我已經給出我的理解。希望這些能幫大家在腦海里建立起大致的並發知識體系.
jimin老師課程地址:Java並發編程與高並發解決方案