// 並行***個執行緒直接進行送分
public void concurrentaddpoint(listdetailslist,liststatlist, int addsum) else
concurrentjob job = new concurrentjob(l,statlist);
exe.fork(job);// 派發任務
}// 彙總任務結果
int result = (integer) exe.join();
logger.info("concurrentadding result:"+result);
logger.info("concurrentadding info: totalsize[ " + totalsize + " ], threadsize[ " + concurrentsize + " ], addsum[ " + addsum + " ]");
logger.info("concurrentadding cost time: " + (system.currenttimemillis() - time));
exe.shutdown();
}class concurrentjob extends job
public object execute() catch (exception e)
logger.info("concurrentaddpoint thread = " + thread.currentthread().getname() + " | size: " + detailslist.size() + " | time: " + (system.currenttimemillis() - time));
return 1;}}
static class executer
public executer(int threadpoolsize)
/*** 任務派發
* * @param job
*/public void fork(job job)
}/**
* 統計任務結果
*/public int join() catch (interruptedexception e) }}
int result = 0;
// 取出每個任務的處理結果,彙總後返回
for (future<?> future : futres) catch (exception e)
}return result;
}public void shutdown()
}static abstract class job implements callable
public object call() throws exception catch (exception e)
synchronized (lock)
return result;
}/**
* 業務處理函式
*/public abstract object execute();
}static class lock
golang 併發實踐
golang 高併發主要是依靠sync包下的api實現,首先就是waitgroup 先說說waitgroup的用途 它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。waitgroup總共有三個方法 add delta int done wa...
Go併發程式設計實踐
併發程式設計一直是golang區別與其他語言的很大優勢,也是實際工作場景中經常遇到的。近日筆者在組內分享了我們常見的併發場景,及 示例,以期望大家能在遇到相同場景下,能快速的想到解決方案,或者是拿這些方案與自己實現的比較,取長補短。現整理出來與大家共享。回到頂部 很多時候,我們只想併發的做一件事情,...
java併發程式設計實踐
chapter 2 執行緒安全 常見的競爭條件包括檢查在執行,讀 改 寫.典型的檢查再執行操作為延遲初始化 if is null then.典型的讀 改 寫操作為自增運算 x 動態同步方法鎖住當前物件本身,靜態同步方法鎖住class物件 chapter 2 可見性 讀讀不需要同步,讀寫,寫寫需要.當...