1. 程式人生 > >java web開發中需要用到多執行緒程式設計的場景?

java web開發中需要用到多執行緒程式設計的場景?

問:能不能簡單描述一下你在java web開發中需要用到多執行緒程式設計的場景?

對多執行緒有些瞭解,但是不太清楚具體的應用場景,能簡單說一下你遇到的多執行緒程式設計的場景嗎?

回答一:

最典型的如:
1、使用者註冊完成送大禮包/積分之類,且積分等也是另一個系統並比較耗時;且這類任務即使失敗也不是特別重要的。
2、後臺執行緒:比如定期執行一些特殊任務,如定期更新配置檔案,任務排程(如quartz),一些監控用於定期資訊採集等。

回答二:

最典型的應用比如tomcat,tomcat內部採用的就是多執行緒,上百個客戶端訪問同一個web應用,tomcat接入後都是把後續的處理扔給一個新的執行緒來處理,這個新的執行緒最後呼叫到我們的servlet程式,比如doGet或者doPost方法。

如果不採用多執行緒機制,上百個人同時訪問一個web應用的時候,tomcat就得排隊序列處理了,那樣客戶端根本是無法忍受那種訪問速度的。

還有就是需要非同步處理的時候,需要使用多執行緒。比如task a和task b要並行處理,單個執行緒只能序列處理,先做完task a然後再做task b。如果想要多個task同時執行的話,就必須為每個task分配一個執行緒,然後通過java虛擬機器的執行緒排程,來同時執行多個任務。比如你的CPU是多核心的話,就可以讓一個CPU執行一個執行緒。如果只有一個CPU的話,底層是按照分時複用的原則,各個執行緒按照時間片來獲得CPU資源。

回答三:



特別耗時的操作,如備份資料庫,可以開個執行緒執行備份,然後執行返回,前臺不斷向後臺詢問執行緒執行狀態


問:JAVA專案中哪些場景需要用到多執行緒,深感迷茫,請使用過的高手指點。

答:


場景一:一個業務邏輯有很多次的迴圈,每次迴圈之間沒有影響,比如驗證1萬條url路徑是否存在,正常情況要迴圈1萬次,逐個去驗證每一條URL,這樣效率會很低,假設驗證一條需要1分鐘,總共就需要1萬分鍾,有點恐怖。這時可以用多執行緒,將1萬條URL分成50等份,開50個執行緒,沒個執行緒只需驗證200條,這樣所有的執行緒執行完是遠小於1萬分鐘的。

 

場景二:需要知道一個任務的執行進度,比如我們常看到的進度條,實現方式可以是在任務中加入一個整型屬性變數(這樣不同方法可以共享),任務執行一定程度就給變數值加1,另外開一個執行緒按時間間隔不斷去訪問這個變數,並反饋給使用者。

 

總之使用多執行緒就是為了充分利用cpu的資源,提高程式執行效率,當你發現一個業務邏輯執行效率特別低,耗時特別長,就可以考慮使用多執行緒。不過CPU執行哪個執行緒的時間和順序是不確定的,即使設定了執行緒的優先順序,因此使用多執行緒的風險也是比較大的,會出現很多預料不到的問題,一定要多熟悉概念,多構造不同的場景去測試才能夠掌握!

 

以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋應用 , 執行緒 , 多執行緒 , cpu , 效率 時間 java web專案 多執行緒、java多執行緒應用場景、java多執行緒的應用場景、java多執行緒使用場景、java多執行緒場景,以便於您獲取更多的相關知識。