//進行任務分解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...