什麼樣的業務場景適合用多線程,請舉例?

asdf204687275


首先了解下什麼是多線程吧!多線程就是“人海戰術”,伴隨著摩爾定律的失效(單核心的計算能力不能再成倍的增長,而改為橫向擴展),CPU變為了多核心的模式,而每一個CPU在同一時間能處理一個線程,也就是說同一時間線程的執行數可以為CPU核心數(超線程不討論)!效率為以前單核心的N倍!



JAVA這門編程語言,可謂是讓多線程技術變得老生常談,那麼多線程使用在什麼地方呢?

1,web服務器:web服務器的請求數往往是非常大的,而且自從有了HTTP1.1之後,TCP默認是長連接模式,一般像tomcat這樣的服務器會開多個線程保持與客戶端的連接,所以需要多線程!

2,異步調用:比如電商平臺,在主線程處理完訂單等主業務之後,需要發短信,郵件等非主要的業務代碼,這個時候可以新起一個線程,異步調用,而主線程可以直接返回,避免長時間的等待!

3,上傳下載大文件處理:比如迅雷,如果是單線程,那麼同一時候,它就只能寫一個下載任務的數據,但是多線程就可以同時進行更多任務!


4,分佈式計算:比如1+2+...+100000,你可以分為十個任務,然後彙總即可,比單線程可以省大約9/10的時間!

還有更多場景可以適用於多線程環境,具體問題具體分析!

但是多線程其實絕對是魔鬼,從jdk中的併發包就可見端倪,不管是synchronize,lock,threadlocal,線程池,countbatchdown,forkjoin,future,callable,valatile哪一個多線程的關鍵字,都可以讓我們JAVA編程人員生不如死!

只能說不到萬不得已,不要盲目的使用多線程,比如redis就能靠著單線程一枝獨秀,linux之父Linus Tonvard說過:忘掉那該死的併發吧!可見這個多線程多麼的不可取,只是如果我們JAVA程序員如果不會多線程,應該就失業了吧!

反正不管多線程有多痛苦,以後我還是會發多線程的技術分享的,敬請關注!


哎喲JAVA不錯哦


實際題主主要考慮的是併發編程的問題,實際的業務開發中,會或多或少的接觸一些這樣的併發編程的場景。本人也從事軟件開發多年,有一定的併發編程經驗,正好藉此機會將自己的遇到的一些場景總結一下:

首先,併發編程可以說是Java高級研發人員需要掌握的一項技能,併發編程是一項非常複雜的編程能力。

場景一:B/S或C/S模式下。一個服務端對應著數量眾多的用戶,此種場景下適合使用併發編程。將每個用戶的操作可以看做是一個獨立的任務,多個用戶可以看做是多個獨立的任務,這樣的場景就是個併發編程。此種場景下適合在服務端創建線程池執行用戶的任務。

場景二:單線程的執行能力已經到達瓶頸,只有做併發編程,才可以讓程序的執行速度得到質的提高。此種情況下,適合加入併發編程,通過併發編程大大提高程序的執行速度。

場景三:仿真模擬。在做測試的時候,模擬單一用戶無法達到要求,需要做藉助併發編程模擬多用戶時,可以使用併發編程。

場景四:異步處理。比如說,服務端在接收客戶端的消息進行處理時,此時處理非常複雜,耗費時間長,可以藉助併發編程,啟動新的線程進行後續的耗時業務處理,更快的響應用戶,讓用戶得到更好的體驗。

當然,想處理好併發編程也並給一日之功,需要不斷的實踐總結。

本人具有多年的java開發經驗,熟悉多種框架,熟悉網絡編程,熟悉java安全編程,熟悉大數據,熟悉多種安全協議,熟悉併發編程,有興趣的同學可以互相關注,互相學習!!!


分享到:


相關文章: