Skip to content

Commit ebbfbe8

Browse files
HW1: implemented parallel multiplication matrixA*matrixB
1 parent 27e867a commit ebbfbe8

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/main/java/ru/javaops/masterjava/matrix/MainMatrix.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44
import java.util.concurrent.ExecutorService;
55
import java.util.concurrent.Executors;
66

7+
import static ru.javaops.masterjava.matrix.MatrixUtil.MATRIX_SIZE;
8+
import static ru.javaops.masterjava.matrix.MatrixUtil.THREAD_NUMBER;
9+
710
/**
811
* gkislin
912
* 03.07.2016
1013
*/
1114
public class MainMatrix {
12-
private static final int MATRIX_SIZE = 1000;
13-
private static final int THREAD_NUMBER = 10;
1415

15-
private final static ExecutorService executor = Executors.newFixedThreadPool(MainMatrix.THREAD_NUMBER);
16+
private final static ExecutorService executor = Executors.newFixedThreadPool(THREAD_NUMBER);
1617

1718
public static void main(String[] args) throws ExecutionException, InterruptedException {
1819
final int[][] matrixA = MatrixUtil.create(MATRIX_SIZE);
@@ -47,6 +48,6 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
4748
}
4849

4950
private static void out(String format, double ms) {
50-
System.out.println(String.format(format, ms));
51+
System.out.printf((format) + "%n", ms);
5152
}
5253
}

src/main/java/ru/javaops/masterjava/matrix/MatrixUtil.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
11
package ru.javaops.masterjava.matrix;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
35
import java.util.Random;
46
import java.util.concurrent.ExecutionException;
57
import java.util.concurrent.ExecutorService;
8+
import java.util.concurrent.ThreadPoolExecutor;
69

710
/**
811
* gkislin
912
* 03.07.2016
1013
*/
1114
public class MatrixUtil {
15+
static final int MATRIX_SIZE = 1000;
16+
static final int THREAD_NUMBER = 10;
1217

13-
// TODO implement parallel multiplication matrixA*matrixB
18+
// T_O_D_O implement parallel multiplication matrixA*matrixB
1419
public static int[][] concurrentMultiply(int[][] matrixA, int[][] matrixB, ExecutorService executor) throws InterruptedException, ExecutionException {
1520
final int matrixSize = matrixA.length;
1621
final int[][] matrixC = new int[matrixSize][matrixSize];
17-
22+
// List<CallableTask> tasks = new ArrayList<>();
23+
// executor.invokeAll(tasks);
24+
for (int i = 0; i < MATRIX_SIZE; i++) {
25+
for (int j = 0; j < MATRIX_SIZE; j++) {
26+
executor.submit(new Task(matrixA, matrixB, matrixC, i, j));
27+
}
28+
}
29+
while (((ThreadPoolExecutor) executor).getQueue().size() > 0) ;
1830
return matrixC;
1931
}
2032

@@ -58,4 +70,29 @@ public static boolean compare(int[][] matrixA, int[][] matrixB) {
5870
}
5971
return true;
6072
}
73+
74+
static class Task implements Runnable {
75+
private final int[][] matrixA;
76+
private final int[][] matrixB;
77+
private final int[][] matrixC;
78+
private final int i;
79+
private final int j;
80+
81+
public Task(int[][] matrixA, int[][] matrixB, int[][] matrixC, int i, int j) {
82+
this.matrixA = matrixA;
83+
this.matrixB = matrixB;
84+
this.matrixC = matrixC;
85+
this.i = i;
86+
this.j = j;
87+
}
88+
89+
@Override
90+
public void run() {
91+
int sum = 0;
92+
for (int k = 0; k < matrixA.length; k++) {
93+
sum += matrixA[i][k] * matrixB[k][j];
94+
}
95+
matrixC[i][j] = sum;
96+
}
97+
}
6198
}

0 commit comments

Comments
 (0)