需求:查询int数组中最大值
package test;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ExecutorServiceTest {
public static void main(String[] args) throws InterruptedException, ExecutionException {
int[] data = {2,3,4,1};
MultithreadMaxFinder mmf = new MultithreadMaxFinder();
System.out.println(mmf.max(data));
}
}
class MultithreadMaxFinder{
public int max(int[] data) throws InterruptedException, ExecutionException{
if(data.length == 1)
return data[0];
else if(data.length == 0)
throw new IllegalArgumentException();
ExecutorService es = Executors.newFixedThreadPool(2);
FindMaxTask task1 = new FindMaxTask(data, 0, data.length/2);
FindMaxTask task2 = new FindMaxTask(data, data.length/2, data.length);
Future<Integer> future1 = es.submit(task1);
Future<Integer> future2 = es.submit(task2);
return Math.max(future1.get(), future2.get());
}
}
class FindMaxTask implements Callable<Integer>{
private int[] data;
private int start;
private int end;
FindMaxTask(int[] data, int start, int end){
this.data = data;
this.start = start;
this.end = end;
}
@Override
public Integer call() throws Exception {
int max = Integer.MIN_VALUE;
for(int i=start; i<end; i++){
if(data[i] > max)
max = data[i];
}
return max;
}
}