我正在刷新我在Java中的多線程技能並實現了這個簡單的劃分&征服方法在列表中查找最大元素,使用來自java.util.concurrent.ForkJoinTask的RecursiveTaskJava多線程 - 使用Fork-Join方法在列表中查找最大元素
public static void main(String[] args){
new Multithreading().compute();
}
public void compute(){
Integer[] ints = {3,2,5,7,1};
List<Integer> list = Arrays.asList(ints);
ForkJoinPool pool = new ForkJoinPool();
Integer result = pool.invoke(new DividerTask(list));
System.out.println(result);
}
class DividerTask extends RecursiveTask<Integer>{
List<Integer> list;
public DividerTask(List list){
this.list = list;
}
@Override
protected Integer compute(){
if(list.size() > 2){
int mid = list.size()/2;
List<Integer> list1 = list.subList(0,mid);
List<Integer> list2 = list.subList(mid,list.size());
DividerTask dt1 = new DividerTask(list1);
dt1.fork();
DividerTask dt2 = new DividerTask(list2);
dt2.fork();
Integer res1 = dt1.join();
Integer res2 = dt2.join();
return (res1 > res2 ? res1 : res2);
}
if(list.size() == 2){
Integer res1 = list.get(0);
Integer res2 = list.get(1);
return (res1 > res2 ? res1 : res2);
}
return list.get(0);
}
}
你會如何處理這個問題?你會考慮哪些其他多線程解決方案?
爲什麼你想要另一種解決方案? – Bram 2015-04-03 11:16:16
CodeReview.SE會更好嗎? – Rich 2015-04-03 14:46:32
@Rich如果它在這裏關閉,那麼是的。如果沒有,那麼它在這裏和Code Review一樣好。 – 2015-04-03 14:59:09