import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class MatrixMultiplication { public static int[][] multiply(int[][] matrixA, int[][] matrixB, int numThreads) { int n = matrixA.length; int[][] result = new int[n][n]; if (numThreads == 1) { // Последовательное умножение for (int i = 0; i < n; i++) { multiplyRow(matrixA, matrixB, result, i); } } else { // Многопоточное умножение ExecutorService executor = Executors.newFixedThreadPool(numThreads); for (int i = 0; i < n; i++) { final int row = i; executor.submit(() -> multiplyRow(matrixA, matrixB, result, row)); } executor.shutdown(); try { // Ожидаем завершения всех задач executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } return result; } private static void multiplyRow(int[][] matrixA, int[][] matrixB, int[][] result, int row) { int n = matrixA.length; for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { result[row][j] += matrixA[row][k] * matrixB[k][j]; } } } }