packagefun.happyhacker;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.List;importjava.util.concurrent.ForkJoinTask;importjava.util.concurrent.RecursiveTask;importjava.util.logging.Level;importjava.util.logging.Logger;publicclassCustomRecursiveTaskextendsRecursiveTask<Integer>{privatefinalint[]arr;privatestaticfinalintTHRESHOLD=20;privatestaticfinalLoggerlogger=Logger.getAnonymousLogger();publicstaticvoidmain(String[]args){int[]arr=newint[1000000];for(inti=0;i<arr.length;i++){arr[i]=(int)(Math.random()*100);}CustomRecursiveTaskcustomRecursiveTask=newCustomRecursiveTask(arr);Integerresult=customRecursiveTask.compute();logger.log(Level.INFO,"sum of ints between 10 and 27 and multiply by 10 is: {0}",result);}publicCustomRecursiveTask(int[]arr){this.arr=arr;}@OverrideprotectedIntegercompute(){if(arr.length>THRESHOLD){returnForkJoinTask.invokeAll(createSubtasks()).stream().mapToInt(ForkJoinTask::join).sum();}else{returnprocessing(arr);}}privateCollection<CustomRecursiveTask>createSubtasks(){List<CustomRecursiveTask>dividedTasks=newArrayList<>();dividedTasks.add(newCustomRecursiveTask(Arrays.copyOfRange(arr,0,arr.length/2)));dividedTasks.add(newCustomRecursiveTask(Arrays.copyOfRange(arr,arr.length/2,arr.length)));returndividedTasks;}privateIntegerprocessing(int[]arr){returnArrays.stream(arr).filter(a->a>10&&a<27).map(a->a*10).sum();}}