# Лабораторная работа №1. Вариант 16. **Упорядочить столбцы матрицы по возрастанию суммы их элементов.** Для работы используем: 1) Однопоточный алгоритм. 2) Многопоточный алгоритм с использованием ThreadPoolExecutor. 3) Многопоточный алгоритм с использованием ForkJoinPool. ## Как запустить лабораторную работу Сначала компилируем наш код коммандой: javac Main.java Затем запускаем: java Main ## Технологии Стандартные библиотеки Java: java.util.concurrent для работы с многопоточностью. ThreadPoolExecutor: Используется для управления пулом потоков, тут каждый поток вычисляет сумму для отдельного столбца. ForkJoinPool: Используется для рекурсивного разбиения задачи: делим матрицу пополам рекурсивно, и каждый поток работает с несколькими столбцами. ## Что программа делает Задача — упорядочить столбцы матрицы по возрастанию суммы их элементов. Посмотрим поэтапно: 1) Генерируем матрицу случайным образом в зависимости от указанной размерности, диапазон значений может быть от 0 до 99. 2) Записываем в файл input_matrix.txt. 3) Далее используем сначала однопоточный алгоритм: Суммы столбцов вычисляются последовательно, и только потом столбцы сортируются по этим суммам. 4) Теперь посмотрим как работает многопоточный алгоритм с ThreadPoolExecutor: Суммы столбцов вычисляются параллельно с использованием пула потоков, потом столбцы сортируются. 5) Многопоточный алгоритм с ForkJoinPool: Суммы столбцов вычисляются параллельно с использованием ForkJoinPool, который разбивает задачу на подзадачи. 6) Время выполнения каждого алгоритма замеряется и выводится в консоль. 7) Отсортированная матрица записывается в файлы: output_single_thread.txt, output_thread_pool.txt и output_fork_join.txt для каждого из алгоритмов. Хотя результат работы сортировки и будет одинаковым, итоги всё равно запишем в отдельные файлы. ## Примеры входных и выходных значений Input lines: 1000 Input columns: 1000 One thread: 611 mc ThreadPoolExecutor: 128 mc ForkJoinPool: 76 mc Input lines: 500 Input columns: 500 One thread: 305 mc ThreadPoolExecutor: 116 mc ForkJoinPool: 15 mc Input lines: 100 Input columns: 100 One thread: 489 mc ThreadPoolExecutor: 91 mc ForkJoinPool: 30 mc Input lines: 10 Input columns: 10 One thread: 186 mc ThreadPoolExecutor: 20 mc ForkJoinPool: 4 mc