import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 多線程計算測試
*
* 創建10個任務,分別產生一個結果,最後統計這些任務的最終結果
*
*/
public class ConcurrentCaculate {
private ExecutorService es = Executors.newFixedThreadPool(100);
private Map<String,Integer> resultMap = new ConcurrentHashMap<String, Integer>();
private void initTask(int taskNum){
for(int i = 0; i < taskNum; i++ ){
Thread taskThread = new Thread(new TaskThread());
es.execute(taskThread);
}
es.shutdown();
}
private String getFinalResult(){
if(es.isTerminated()){
System.out.println("線程已經執行完畢,開始計算最終結果!");
int result = 0;
Iterator<Entry<String, Integer>> iterator = resultMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, Integer> entry = (Entry<String, Integer>) iterator.next();
System.out.println("計算最終結果,疊加結果:["+ entry.getValue()+"]");
result += entry.getValue();
}
return String.valueOf(result);
}else{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("線程未執行完畢,繼續等待!");
return getFinalResult();
}
}
class TaskThread implements Runnable{
private int ramdom ;
@Override
public void run() {
ramdom = new Random().nextInt(10);
resultMap.put(String.valueOf(Thread.currentThread().getId()), ramdom);
System.out.println("啟動計算任務,計算中...結果賦值到romdom中:【"+ramdom+"】");
}
}
public static void main(String[] args) {
ConcurrentCaculate cc = new ConcurrentCaculate();
cc.initTask(10);
System.out.println("concurrent thread caculate result is :["+cc.getFinalResult()+"]");
}
}
运行结果如下:
啟動計算任務,計算中...結果賦值到romdom中:【5】
啟動計算任務,計算中...結果賦值到romdom中:【2】
啟動計算任務,計算中...結果賦值到romdom中:【3】
啟動計算任務,計算中...結果賦值到romdom中:【8】
啟動計算任務,計算中...結果賦值到romdom中:【0】
啟動計算任務,計算中...結果賦值到romdom中:【1】
啟動計算任務,計算中...結果賦值到romdom中:【8】
啟動計算任務,計算中...結果賦值到romdom中:【4】
啟動計算任務,計算中...結果賦值到romdom中:【9】
啟動計算任務,計算中...結果賦值到romdom中:【8】
線程未執行完畢,繼續等待!
線程已經執行完畢,開始計算最終結果!
計算最終結果,疊加結果:[0]
計算最終結果,疊加結果:[3]
計算最終結果,疊加結果:[9]
計算最終結果,疊加結果:[5]
計算最終結果,疊加結果:[8]
計算最終結果,疊加結果:[8]
計算最終結果,疊加結果:[1]
計算最終結果,疊加結果:[2]
計算最終結果,疊加結果:[8]
計算最終結果,疊加結果:[4]
concurrent thread caculate result is :[48]