import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ThreadPoolMatrixProcessor {
    public static void process(double[][] matrix, int threadPoolSize) throws InterruptedException {
        int rows = matrix.length;
        int cols = matrix[0].length;

        // Вычисляем среднее арифметическое
        double sum = 0;
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                sum += matrix[i][j];
            }
        }
        double average = sum / (rows * cols);

        // Создаем пул потоков
        ExecutorService executor = Executors.newFixedThreadPool(threadPoolSize);

        // Обрабатываем каждую строку в отдельном потоке
        for (int i = 0; i < rows; i++) {
            final int row = i;
            executor.submit(() -> {
                for (int j = 0; j < cols; j++) {
                    matrix[row][j] /= average;
                }
            });
        }

        // Завершаем работу пула
        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.MINUTES);
    }
}
