RecursiveTask示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qgwperfect/article/details/88885090
public class ForkJoinRecursiveTask {

	private final static int MAX_THRESHOLD = 100;
	
	public static void main(String[] args) {
		final ForkJoinPool forkJoinPool = new ForkJoinPool();
		ForkJoinTask<Integer> task = forkJoinPool.submit(new CalculateRecursiveTask(0, 1000));
		try {
			Integer sumResult = task.get();
			System.out.println(sumResult);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
	}
	
	@SuppressWarnings({"serial" })
	private static class CalculateRecursiveTask extends RecursiveTask<Integer> {
		
		private int start;
		
		private int end;
		
		public CalculateRecursiveTask(int start, int end) {
			this.start = start;
			this.end = end;
		}

		@Override
		protected Integer compute() {
			if (end - start <= MAX_THRESHOLD) {
				return IntStream.rangeClosed(start, end).sum();
			} else {
				int middle = (start + end) / 2;
				CalculateRecursiveTask lTask = new CalculateRecursiveTask(start, middle);
				CalculateRecursiveTask rTask = new CalculateRecursiveTask(middle+1, end);
				lTask.fork();
				rTask.fork();
				return lTask.join() + rTask.join();
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Qgwperfect/article/details/88885090