一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - SpringBoot CountDownLatch多任務并行處理的實現方法

SpringBoot CountDownLatch多任務并行處理的實現方法

2021-04-23 11:22小柒 Java教程

本篇文章主要介紹了SpringBoot CountDownLatch多任務并行處理的實現方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

最近在做一個原始成績統計的功能,用戶通過前臺設置相關參數,后臺實時統計并返回數據。相對來說統計功能點還是比較多的,這里大體羅列一下。

  1. 個人排名
  2. 本次測試的優良線、及格線、低分線
  3. 各個班級的排名人數(1-25、26-50 類比等等)
  4. 各個班級的前x名人數統計(前10、前20 類比等等)
  5. 各個班級的分數段學生人數統計(150-140、139-130 類比等等)

最好的用戶體驗,就是每一個操作都可以實時的展示數據,3秒之內應該是用戶的忍受范圍之內的了,所以做一款產品不僅要考慮用戶交互設計,后端的優化也是比不可少的。

大家可以簡單的看下以上這5項統計數據,總體來說,統計量還是不少的。最主要的還是要實時、實時、實時(重要的事情說三遍),顯然定時任務是不現實的。

改造前

程序邏輯

SpringBoot CountDownLatch多任務并行處理的實現方法

順序執行任務.png

改造后

程序邏輯

SpringBoot CountDownLatch多任務并行處理的實現方法

多任務并行處理.png

多任務并行處理,適用于多核cpu,單核cpu多線程執行任務可能會適得其反(上下文切換以及線程的創建和銷毀都會消耗資源),特別是cpu密集型的任務。

代碼實現

statsdemo偽代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * 多任務并行統計
 * 創建者 科幫網
 * 創建時間  2018年4月16日
 */
public class statsdemo {
  final static simpledateformat sdf = new simpledateformat(
      "yyyy-mm-dd hh:mm:ss");
  
  final static string starttime = sdf.format(new date());
 
  public static void main(string[] args) throws interruptedexception {
    countdownlatch latch = new countdownlatch(5);// 兩個賽跑者
    stats stats1 = new stats("任務a", 1000, latch);
    stats stats2 = new stats("任務b", 2000, latch);
    stats stats3 = new stats("任務c", 2000, latch);
    stats stats4 = new stats("任務d", 2000, latch);
    stats stats5 = new stats("任務e", 2000, latch);
    stats1.start();//任務a開始執行
    stats2.start();//任務b開始執行
    stats3.start();//任務c開始執行
    stats4.start();//任務d開始執行
    stats5.start();//任務e開始執行
    latch.await();// 等待所有人任務結束
    system.out.println("所有的統計任務執行完成:" + sdf.format(new date()));
  }
 
  static class stats extends thread {
    string statsname;
    int runtime;
    countdownlatch latch;
 
    public stats(string statsname, int runtime, countdownlatch latch) {
      this.statsname = statsname;
      this.runtime = runtime;
      this.latch = latch;
    }
 
    public void run() {
      try {
        system.out.println(statsname+ " do stats begin at "+ starttime);
        //模擬任務執行時間
        thread.sleep(runtime);
        system.out.println(statsname + " do stats complete at "+ sdf.format(new date()));
        latch.countdown();//單次任務結束,計數器減一
      } catch (interruptedexception e) {
        e.printstacktrace();
      }
    }
  }
}

由于要同步返回統計數據,這里我們使用到了countdownlatch類,它是java5中新增的一個并發工具類,其使用非常簡單,參考上面的偽代碼給出了詳細的使用步驟。

countdownlatch用于同步一個或多個任務,強制他們等待由其他任務執行的一組操作完成。countdownlatch典型的用法是將一個程序分為n個互相獨立的可解決任務,并創建值為n的countdownlatch。當每一個任務完成時,都會在這個鎖存器上調用countdown,等待問題被解決的任務調用這個鎖存器的await,將他們自己攔住,直至鎖存器計數結束。

具體的源碼解讀,大家可以參考: 源碼分析之countdownlatch

項目源碼:https://gitee.com/52itstyle/spring-data-jpa

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.52itstyle.com/archives/2689/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: a一级黄| 青青草成人在线观看 | 亚洲欧美精品久久 | 白丝女仆被啪到深夜漫画 | 好湿好滑好硬好爽好深视频 | 97精品国产自在现线免费观看 | 国产亚洲sss在线观看 | 日韩视频免费一区二区三区 | 热门小说同人h改编h | 91大神大战高跟丝袜美女 | 国产精品福利一区二区亚瑟 | 福利一区二区在线观看 | 免费观看无人区完整版 | 俄罗斯三级在线观看级 | 欧美日韩国产一区二区三区欧 | 国产精品麻豆免费版 | 精品国产理论在线观看不卡 | asianfemdom妍妍女王 | 99热这里只有精品在线 | 福利一区在线观看 | 成人伊人青草久久综合网破解版 | 日本高清动作片www欧美 | 成年人在线观看视频免费 | 视频一区精品 | 大陆国语自产精品视频在 | 日韩免费视频播播 | 无遮挡h肉动漫在线观看电车 | 亚洲国产精品久久网午夜小说 | 日韩精品视频在线播放 | 亚洲欧美日韩中文高清一 | 波多野结衣护士 | 亚洲a视频在线 | 欧美一级高清片免费一级 | 亚洲成人一区 | 亚洲成a人片777777久久 | 成人性用品 | 亚洲精品国产精品国自产观看 | 日日干夜夜拍 | 国产精品久久香蕉免费播放 | 91久久夜色精品国产九色 | 国内自拍网红在线自拍综合 |