SpringBoot開發案例之多任務並行+線程池處理

前言

前幾篇文章着重介紹了後端服務數據庫和多線程並行處理優化,並示例了改造前後的僞代碼邏輯。當然了,優化是無止境的,前人栽樹後人乘涼。作爲我們開發者來說,既然站在了巨人的肩膀上,就要寫出更加優化的程序。

  • SpringBoot開發案例之JdbcTemplate批量操作

  • SpringBoot開發案例之CountDownLatch多任務並行處理

改造

理論上講,線程越多程序可能更快,但是在實際使用中我們需要考慮到線程本身的創建以及銷燬的資源消耗,以及保護操作系統本身的目的。我們通常需要將線程限制在一定的範圍之類,線程池就起到了這樣的作用。

程序邏輯

多任務並行+線程池處理.png

一張圖能解決的問題,就應該儘可能的少BB,當然底層原理性的東西還是需要大家去記憶並理解的。

Java 線程池

Java通過Executors提供四種線程池,分別爲:

  • newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程。

  • newFixedThreadPool 創建一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。

  • newScheduledThreadPool 創建一個定長線程池,支持定時及週期性任務執行。

  • newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。

優點

  • 重用存在的線程,減少對象創建、消亡的開銷,性能佳。

  • 可有效控制最大併發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞。

  • 提供定時執行、定期執行、單線程、併發數控制等功能。

代碼實現


方式一(CountDownLatch)

pgc-image/1524645238708deb463f301


方式二(Future)

pgc-image/15246453570726ba6ae0f48

pgc-image/152464539816973133bb497

執行時間

以上代碼,均是僞代碼,下面是2000+個學生的真實測試記錄。

pgc-image/1524645564262f75959f62c


在這裏呢小編給大家推薦一個免費提升Java技術學習好地方,課程涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高併發分佈式、大數據、機器學習等技術。

轉送門:http://yunxi.ai/java/java.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章