Ad Code

Responsive Advertisement

Ticker

6/recent/ticker-posts

Java Program to find the Task Array of an Array and calculate its addition

Java Program to find the Task Array and calculate its addition

In this program we have taken the array as input from the user and then created various tasks on the array field and then we have done the summation of the current task.

Java Program - 

JoinFork.java - 

package com.gpm.joinforkproject;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.ForkJoinPool;

public class JoinFork {

   public static void main(String[] args) {
   // write your code here
        Scanner sc = new Scanner(System.in);
        int size;
        int result;
        System.out.println("Enter Number of elements> ");
        size = sc.nextInt();

        ArrayList<Integer> elements = new ArrayList<Integer>(size);

        System.out.println("Enter Elements > ");

        for(int i=0 ;i<size;i++)
        {
            elements.add(sc.nextInt());
        }

        ForkJoinPool pool = new ForkJoinPool();

        CustomRecursiveTask customRecursiveTask = new CustomRecursiveTask(elements);
        result = pool.invoke(customRecursiveTask);
        System.out.println("Addition > "+result);

    }
}

CustomRecursiveTask.java - 

package com.gpm.joinforkproject;
import java.util.concurrent.RecursiveTask;
import java.util.ArrayList;
import java.util.List;

public class CustomRecursiveTask extends RecursiveTask<Integer> {
    ArrayList<Integer> task;

    int threshold = 2;

    public CustomRecursiveTask(ArrayList<Integer> task) {
        this.task = task;
        System.out.println();
        System.out.println("Task Array> ");

        for (Integer i : task) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

    @Override
    protected Integer compute() {
        int result = 0;
        if (task.size() > threshold) {
            //Divide current task into subtask
            List<CustomRecursiveTask> taskList = new ArrayList<CustomRecursiveTask>();
            taskList.addAll(CreateSubtask());

            for (CustomRecursiveTask subtask : taskList) {
                subtask.fork();
            }

            for (CustomRecursiveTask subtask : taskList) {
                result += subtask.join();
            }
        } else {
            //process task
            result = Process();
        }
        System.out.println("Addition of current task >" + result);
        return result;
    }


    private int Process() {
        int result = 0;
        for (int i = 0; i < this.task.size(); i++) {
            result = result + this.task.get(i);
        }
        return result;
    }

    private List<CustomRecursiveTask> CreateSubtask() {
        int listSize = this.task.size();
        List<CustomRecursiveTask> subtask = new ArrayList<CustomRecursiveTask>(2);


        ArrayList<Integer> FirstArray = new ArrayList<Integer>();
        FirstArray = MakeArrayIntegerList(this.task, 0, listSize / 2 - 1);


        ArrayList<Integer> SecondArray = new ArrayList<Integer>();
        SecondArray = MakeArrayIntegerList(this.task, listSize / 2, listSize - 1);

        subtask.add(new CustomRecursiveTask(FirstArray));
        subtask.add(new CustomRecursiveTask(SecondArray));

        return subtask;
    }

    private ArrayList<Integer> MakeArrayIntegerList(ArrayList<Integer> list, int startIndex, int lastIndex) {
        ArrayList<Integer> newList = new ArrayList<Integer>();
        for (int i = startIndex; i <= lastIndex; i++) {
            newList.add(list.get(i));
        }
        return newList;
    }
}


Output - 


Post a Comment

0 Comments

Ad Code

Responsive Advertisement