利用比较熟悉的Runnable接口实现分治法求解package Test;import java.util.HashMap;import java.util.Map;import java.util.Random;public class RunnableTest {private int cpuCoreNumber; private Map<SumCa...
摘要由CSDN通过智能技术生成
利用比较熟悉的Runnable接口实现分治法求解
package Test;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class RunnableTest {
private int cpuCoreNumber;
private Map<SumCalculator,Thread> tasks = new HashMap<SumCalculator,Thread>();
private long sumtotal=0l;
// 内部类
class SumCalculator implements Runnable {
private int[] numbers;
private int start;
private int end;
private long sum=0l;
public SumCalculator(final int[] numbers, int start, int end) {
this.numbers = numbers;
this.start = start;
this.end = end;
}
public void run() {
for (int i = start; i < end; i++) {
sum += numbers[i];
}
System.out.println(sum);
}
}
public RunnableTest() {
cpuCoreNumber = Runtime.getRuntime().availableProcessors();
System.out.println("计算机核心数"+cpuCoreNumber);
}
public long sum(final int[] numbers) throws InterruptedException {
//分治法求解
for (int i = 0; i < cpuCoreNumber; i++) {
int increment = numbers.length / cpuCoreNumber + 1;
int start = increment * i;
int end = increment * i + increment;
System.out.println(increment+":"+start+":"+end);
if (end > numbers.length)
end = numbers.length;
SumCalculator subCalc = new SumCalculator(numbers, start, end);
Thread thread=new Thread(subCalc);
tasks.put(subCalc, thread);
thread.start();
}
return getResult();
}
private long getResult() t