多執行緒處理任務

2021-08-21 07:28:33 字數 2133 閱讀 1950

//進行任務分解

long begin = system.currenttimemillis();

list> futurelist = this.getsmoothdatafuture(fundidlist, 30);

// 阻塞等待所有執行緒全部執行完畢

for (futurefuture : futurelist)

log.info("資料處理耗時:" + (system.currenttimemillis() - begin) / 1000 + "秒");

* 通過多執行緒處理,並返回future

* @param fundidlist

* @return list>

private list> getsmoothdatafuture(listfundidlist, int threadsize) {

int length = fundidlist.size();

int pagesize = length / threadsize;

// 建立指定大小的執行緒池

executorservice executorservice = executors.newfixedthreadpool(threadsize);

// 建立多個有返回值的任務

list> futurelist = new arraylist>();

for (int i = 1; i <= threadsize; i++) {

int start = (i - 1) * pagesize;

int end = i * pagesize;

if (i == threadsize) { // 最後乙個執行緒處理剩餘所有的資料

end = length;

listsubfundidlist = fundidlist.sublist(start, end); // 包括start,不包括end

// 初始化多執行緒輔助類

fundsmoothcallable callable = new fundsmoothcallable(subfundidlist, "執行緒" + i);

// 傳遞資料庫引用

callable.setfundsmoothservice(fundsmoothservice);

// 執行任務並獲取future物件

futurefuture = executorservice.submit(callable);

futurelist.add(future);

// 關閉執行緒池

if (!executorservice.isshutdown()) {

executorservice.shutdown();

return futurelist;

多執行緒處理任務

業務需求是這樣 接受大量效能資料,要求多執行緒處理效能資料,且在任一時刻同種效能資料只能有一條在處理。這裡有5個類 processscheduler 入口,用於接受效能資料,並將每條效能資料加到佇列中處理 actionexecutor 執行緒池包裝類 actionqueue 任務佇列類,用於儲存同種...

多執行緒學習 任務,程序,執行緒

多個任務都在做,其實本質上我們的大腦在同一時間依舊只做了一件事情。程式是指令和資料的有序集合,其本身沒有任何執行的含義,是乙個靜態的概念。通常在乙個程序中可以包含若干個執行緒,當然乙個程序至少有乙個執行緒,不然沒有存在的意義。執行緒是cpu排程和執行的單位。執行緒就是獨立的執行路徑 在程式執行時,即...

多執行緒任務排程學習

昨天找到一套多執行緒任務排程的 相當的不錯,先把思路總結一下。首先需要有乙個任務管理器來管理所有的任務,任務管理器提供新增新任務的介面。然後需要有乙個執行緒池管理器管理所有的執行緒,執行緒分三種狀態 建立 執行 空閒三種狀態,執行緒可以執行任務task。主流程通過乙個taskmonitorthrea...