package com.example.core.masterworker;import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;public class Worker implements Runnable{private ConcurrentLinkedQueue<Task> taskQueue;private ConcurrentHashMap<String,Object> resultMap;//設(shè)置任務(wù)集合public void setTaskQueue(ConcurrentLinkedQueue<Task>taskQueue){this.taskQueue = taskQueue;}//設(shè)置結(jié)果集合public void setResultMap(ConcurrentHashMap<String,Object>resultMap){this.resultMap = resultMap;}@Overridepublic void run(){while(true){Task task = this.taskQueue.poll();if(task == null){break;}try{Object result = handle(task);this.resultMap.put(Integer.toString(task.getId()),result);}catch(Exception e){e.printStackTrace();}}}private Random r = new Random();//實(shí)際做每一個(gè)工作private Object handle(Task task)throws Exception{//每一個(gè)任務(wù)的處理時(shí)間Thread.sleep(200);int ret = task.getCount();return ret;}
}
Main.java
package com.example.core.masterworker;import java.util.Random;public class Main {public static void main(String[] args) {System.out.println("線程數(shù):"+Runtime.getRuntime().availableProcessors());Master master = new Master(new Worker(),Runtime.getRuntime().availableProcessors());Random r = new Random();for(int i=0;i<100;i++){Task t = new Task(i,r.nextInt(1000));master.submit(t);}master.execute();long start = System.currentTimeMillis();while(true){if(master.isComplete()){long end = System.currentTimeMillis();int result = master.getResult();System.out.println("最終結(jié)果為:"+result+",總耗時(shí):"+(end-start));break;}}}
}
/*
output:
線程數(shù):12
最終結(jié)果為:48834,總耗時(shí):1819*/