Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private class MatrixCalculation extends RecursiveTask<Integer> {
- private int[][] matrix = null;
- public MatrixCalculation(int[][] matrix) {
- this.matrix = matrix;
- }
- @Override
- protected Integer compute() {
- if(matrix.length == 1) {
- return matrix[0][0];
- } else {
- //Particionate original matrix in four identical smaller matrix.
- MatrixCalculation matrixCalculation1 = new MatrixCalculation(splitMatrixForGivenQuadrant(matrix, 0,0));
- matrixCalculation1.fork();
- MatrixCalculation matrixCalculation2 = new MatrixCalculation(splitMatrixForGivenQuadrant(matrix, 1,0));
- matrixCalculation2.fork();
- MatrixCalculation matrixCalculation3 = new MatrixCalculation(splitMatrixForGivenQuadrant(matrix, 0,1));
- matrixCalculation3.fork();
- MatrixCalculation matrixCalculation4 = new MatrixCalculation(splitMatrixForGivenQuadrant(matrix, 1,1));
- return matrixCalculation4.compute() + matrixCalculation1.join() + matrixCalculation2.join() + matrixCalculation3.join() ;
- }
- }
- private int[][] splitMatrixForGivenQuadrant(int[][] matrix, int quadrantX, int quadrantY) {
- int[][] firstMatrix = new int[matrix.length/2][matrix.length/2];
- for(int i=0;i<firstMatrix.length;i++) {
- for(int j=0;j<firstMatrix[i].length;j++) {
- firstMatrix[i][j] = matrix[i+quadrantX*matrix.length/2][j+quadrantY*matrix.length/2];
- }
- }
- return firstMatrix;
- }
- }
- private static final int NUMBER_OF_PROCESSORS = 2;
- public static void main(String[] args) {
- ForkJoinTaskExample forkJoinTaskExample = new ForkJoinTaskExample();
- ForkJoinPool forkJoinPool = new ForkJoinPool(NUMBER_OF_PROCESSORS);
- int [][] matrix = new int[][]{{2,1},{3,4}};
- MatrixCalculation matrixCalculation = forkJoinTaskExample.new MatrixCalculation(matrix);
- forkJoinPool.invoke(matrixCalculation);
- System.out.println(matrixCalculation.getRawResult());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement