1. 程式人生 > >SpringBoot開發案例之多任務並行+線程池處理

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

Java SpringBoot

技術分享圖片

前言

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

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

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

改造

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

程序邏輯

技術分享圖片

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

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

Java 線程池

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

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

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

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

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

優點

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

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

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

代碼實現


方式一(CountDownLatch)

技術分享圖片


方式二(Future)

技術分享圖片

技術分享圖片

執行時間

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

技術分享圖片


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

轉送門:https://ke.qq.com/course/293193?flowToken=1002121


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