多線程寫excel數據思路


1背景

  有時候會向excel文件中寫入數據,為了提高寫入速度,需要向每個sheet頁同時寫入數據;此時,可以采用多線程的方式同時進行寫入,提高效率。

2思路

  既然需要用到多線程的,那么肯定需要創建多線程的工具、控制多線程的工具。在這里提供這樣一類工具:CountDownLatch類、ExecutorService類(這里只是一種方式,當然還有其他的方式)。

 

2.1CountDownLatch類

  該類是用來同步多線程處理的類,只有等到每個線程運行完成后,它才會繼續后面的流程;打個這樣的比方:有十個人在十條跑道上比賽,每一個人占用一條跑道,在終點處有個計數員,他負責的任務是必須要等到10位運動員都跑到終點,他才可以宣布比賽結束,否則整個比賽還在繼續進行。這里的CountDownLatch對象就是相當於計數員的角色。它用到的三個方法是:

  • 構造函數:new CountDownLatch(線程個數)。
  • counDown():每個線程結束時都要調用該方法,計數器減一。
  • await():在主線程中調用該方法,一直等到計數器減到為0為止,否則主線程一直暫定在這里。

2.2ExecutorService類

  可以通過Autowire注解的方式生菜ExecutorService對象,然后通過submit方法來啟動一個線程,大致寫法如下:

@Autowire
private ExecutorService executorService;


public void test() {
    executorService.submit(()->{
       // Todo  具體的邏輯實現
   })
}

2.3StopWatch類

  這個類是一個用來分析任務耗時的工具類,非常直觀、簡潔;使用起來也很簡單,大致如下:

 

StopWatch stopWatch = new StopWatch(Thread.currentThread().getStackTrace()[1].getMethodName());
stopWatch.start(“taskName”);
// Todo 執行具體的任務
stopsWatch.stop();

 

  數據分析示例:

----------------------------------------------
ns             %            Task name
3623048300    028%            test2
114789400     010%            test1
9120146000    071%            test3
----------------------------------------------
  • ns:時間單位,納秒
  • %:任務耗時占比,值越大,耗時越長
  • Task name:任務名稱

3小結

  上文只是提到在遇到寫excel時需要同時寫入數據的實現思路,僅供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM