成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot中的并發(fā)處理

社區(qū)管理員 / 2348人閱讀

在使用Spring Boot開發(fā)過程中,并發(fā)concurrency問題不可避免。很多開發(fā)者存在這樣的誤區(qū),使用Servlets為每個請求分配一個新的線程進行處理就不再需要并發(fā)處理了。我將在這篇文章中介紹如何在Spring Boot中處理并發(fā)并且如何避免一些問題。

Spring Boot 并發(fā)基礎

有以下幾點特別值得注意:

  1. 最大線程數(shù):這是為處理應用程序的請求而分配的最大線程數(shù)。

  2. 共享資源:調(diào)用共享資源如數(shù)據(jù)庫

  3. 異步方法調(diào)用:這些方法調(diào)用將會釋放線程資源

  4. 內(nèi)部共享資源:內(nèi)部資源調(diào)用如緩存、共享應用程序狀態(tài)

接下來我們逐一介紹如何處理這些場景

Spring Boot應用程序的最大線程數(shù)量

首先我們必須限制應用程序的線程數(shù)量。如果使用默認內(nèi)嵌的Tomcat Server,我們可以通過server.tomcat.max-threads變量修改線程數(shù)量限制。默認為200。我們可以通過修改此配置以更合理利用硬件資源。

共享外部資源

調(diào)用數(shù)據(jù)庫或者第三方Restful接口可能需要很長時間。

異步方法調(diào)用

我們可能遇到一個請求會調(diào)用多個服務。比如一次請求調(diào)用Service A、B、C,你肯定不想這樣調(diào)用:

Call service A -> Waiting response from Service A -> call service B -> Watiting ... -> Compose response from A B C

每個服務調(diào)用花費三秒,整個請求處理過程將會花費9秒。如果通過下面的做法肯定會更好。

Call service A 
Call serviec B -> Waiting response from Service A B C -> compose reponse from A B C 
Call serviec C

這樣,顯然我們只需要3秒響應。 異步和響應式微服務十分有趣,可以參考其他文章。這里我們只關注Spring boot

Spring Boot中異步調(diào)用

Spring Boot中使用注解@EnabelAsync注解開啟異步支持。使用@Async將返回CompletableFuture<> 。這些異步方法將會在后臺線程中執(zhí)行。如果合理使用異步執(zhí)行,可以避免等待時間。

共享內(nèi)部資源

以上我們討論了我們無法控制的外部資源,對于系統(tǒng)內(nèi)部資源我們應該避免共享他們。Spring Service and Controller都是單例模式,我們需要十分小心,當狀態(tài)改變時,你需要立刻處理。共享狀態(tài)的其他潛在來源是高速緩存和自定義服務器范圍的組件(通常是監(jiān)視,安全性等)。如果你必須使用共享狀態(tài)資源,下面是我的建議:

  1. 處理不可變對象。如果對象是不可變的,則可以避免許多與并發(fā)相關的問題。如果你需要改變一些東西 - 只需創(chuàng)建一個新對象。

  2. 并非所有集合都是線程安全的。一個常見的陷阱是使用HashMap,假設它是線程安全的(它不是。如果你需要并發(fā)訪問,請使用ConcurrentHashMap,HashTable或其他線程安全的解決方案。)。

  3. 不要假設第三方庫是線程安全的。大多數(shù)代碼都沒有,并且必須控制對共享狀態(tài)的訪問。

  4. 如果你要依賴它 - 學習正確的并發(fā)性。我真的建議在實踐中獲得Java Concurrency的副本。寫于2006年,但在2018年仍然非常相關。

總結

Spring中的并發(fā)和多線程是重要的主題。在本文中,我想強調(diào)在編寫Spring Boot應用程序時需要注意的關鍵領域。如果您想在構建高要求,高質(zhì)量的服務時取得成功,您需要圍繞這一主題做出有意識的決策和權衡。我希望通過這篇文章你知道如何開始


文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/127924.html

相關文章

  • Spring Boot 最流行的 16 條實踐解讀!

    摘要:來源是最流行的用于開發(fā)微服務的框架。以下依次列出了最佳實踐,排名不分先后。這非常有助于避免可怕的地獄。推薦使用構造函數(shù)注入這一條實踐來自的項目負責人。保持業(yè)務邏輯免受代碼侵入的一種方法是使用構造函數(shù)注入。 showImg(https://mmbiz.qpic.cn/mmbiz_jpg/R3InYSAIZkHQ40ly9Oztiart2lESCyjCH0JwFRp3oErlYobhibM...

    Ethan815 評論0 收藏0
  • 【推薦】最新200篇:技術文章整理

    摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復實現(xiàn)故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數(shù)據(jù)恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...

    BicycleWarrior 評論0 收藏0
  • 【推薦】最新200篇:技術文章整理

    摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復實現(xiàn)故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數(shù)據(jù)恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...

    tommego 評論0 收藏0
  • 《Java編程方法論:響應式RxJava與代碼設計實戰(zhàn)》序

    摘要:原文鏈接編程方法論響應式與代碼設計實戰(zhàn)序,來自于微信公眾號次靈均閣正文內(nèi)容在一月的架構和設計趨勢報告中,響應式編程和函數(shù)式仍舊編列在第一季度的早期采納者中。 原文鏈接:《Java編程方法論:響應式RxJava與代碼設計實戰(zhàn)》序,來自于微信公眾號:次靈均閣 正文內(nèi)容 在《2019 一月的InfoQ 架構和設計趨勢報告》1中,響應式編程(Reactive Programming)和函數(shù)式...

    PAMPANG 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<