MrGhost75

VECTORxMATRIX(Multithreading)

Sep 23rd, 2020 (edited)
831
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. public class Main {
  6.  
  7.     public static void main(String[] args) throws InterruptedException, IOException {
  8.  
  9.         //Создаём объекты классов VectorXMatrix и MatrixXVector.
  10.         VectorXMatrix vxm = new VectorXMatrix();
  11.         MatrixXVector mxv = new MatrixXVector();
  12.  
  13.         //Создаём потоки, передавай в них объекты классов VectorXMatrix и MatrixXVector.
  14.         Thread childThreadVxM = new Thread(vxm);
  15.         Thread childThreadMxV = new Thread(mxv);
  16.  
  17.         //Консольное меню.
  18.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  19.         while (true) {
  20.             System.out.println("Какой поток вы хотели бы запустить?");
  21.             System.out.println("(1) Умножение вектора на матрицу.");
  22.             System.out.println("(2) Умножение матрицы на вектор.");
  23.             System.out.println("(3) Сразу оба.");
  24.             System.out.println("(4) Закрыть программу.");
  25.  
  26.             //Считали вариант, выбранный пользователем
  27.             int option = Integer.parseInt(reader.readLine());
  28.  
  29.             if (option == 1) {
  30.  
  31.                 childThreadVxM.start();
  32.                 childThreadVxM = new Thread(vxm);
  33.  
  34.             } else if (option == 2) {
  35.  
  36.                 childThreadMxV.start();
  37.                 childThreadMxV = new Thread(mxv);
  38.  
  39.             } else if (option == 3) {
  40.  
  41.                 childThreadVxM.start();
  42.                 childThreadMxV.start();
  43.                 childThreadVxM = new Thread(vxm);
  44.                 childThreadMxV = new Thread(mxv);
  45.  
  46.             } else if (option == 4) break;
  47.  
  48.         }
  49.  
  50.     }
  51.  
  52. }
  53.  
  54.  
  55. public class MatrixXVector implements Runnable{
  56.     @Override
  57.     public void run() {
  58.  
  59.         int[][] matrix = new int[10000][10000]; //Исходная матрица
  60.         int[] vector = new int[10000]; //Исходный вектор
  61.  
  62.         int[] arrayMxV = new int[10000]; //(2) Массив, полученный при умн-ии Матрицы на Вектор
  63.  
  64.         //Заполним матрицу случайными числами от -9 до 9
  65.         for (int i = 0; i < matrix.length; i++) {
  66.             for (int j = 0; j < matrix.length; j++) {
  67.                 matrix[i][j] = (int)(Math.random()*20 - 10);
  68.             }
  69.         }
  70.  
  71.         //Заполним вектор случайными числами от -9 до 9
  72.         for (int i = 0; i < vector.length; i++) {
  73.             vector[i] = (int)(Math.random()*20 - 10);
  74.         }
  75.  
  76.         //(2) Умножение матрицы на вектор (1000x1000 * 1000x1 = массив 1000x1)
  77.         // P.S. на самом деле размерность вектора - 1x1000, но мы его лишь мысленно перевернем,
  78.         // а по факту просто будем обращаться к его элементам, представляя строку как столбец.
  79.  
  80.         long startTime = System.currentTimeMillis();
  81.  
  82.         for (int i = 0; i < matrix.length; i++) {
  83.             int sum = 0;
  84.             for (int j = 0; j < matrix.length; j++) {
  85.                 sum += matrix[i][j] * vector[j];
  86.             }
  87.             arrayMxV[i] = sum;
  88.         }
  89.  
  90.         long endTime = System.currentTimeMillis();
  91.  
  92.         //Выведение времени, которое заняло умножение матрицы на вектор
  93.         System.out.println("Время умножения матрицы на вектор в миллисекундах: " + (endTime - startTime));
  94.     }
  95. }
  96.  
  97.  
  98. public class VectorXMatrix implements Runnable{
  99.     @Override
  100.     public void run() {
  101.  
  102.         int[][] matrix = new int[10000][10000]; //Исходная матрица
  103.         int[] vector = new int[10000]; //Исходный вектор
  104.  
  105.         int[] arrayVxM = new int[10000]; //(1) Массив, полученный при умн-ии Вектора на Матрицу
  106.  
  107.         //Заполним матрицу случайными числами от -9 до 9
  108.         for (int i = 0; i < matrix.length; i++) {
  109.             for (int j = 0; j < matrix.length; j++) {
  110.                 matrix[i][j] = (int)(Math.random()*20 - 10);
  111.             }
  112.         }
  113.  
  114.         //Заполним вектор случайными числами от -9 до 9
  115.         for (int i = 0; i < vector.length; i++) {
  116.             vector[i] = (int)(Math.random()*20 - 10);
  117.         }
  118.  
  119.  
  120.         //(1) Умножение вектора на матрицу (1x1000 * 1000x1000 = массив 1x1000)
  121.  
  122.         long startTime = System.currentTimeMillis();
  123.  
  124.         for (int j = 0; j < matrix.length; j++) {
  125.             int sum = 0;
  126.             for (int i = 0; i < matrix.length; i++) {
  127.                 sum += vector[i] * matrix[i][j];
  128.             }
  129.             arrayVxM[j] = sum;
  130.         }
  131.  
  132.         long endTime = System.currentTimeMillis();
  133.  
  134.         //Выведение времени, которое заняло умножение вектора на матрицу
  135.         System.out.println("Время умножения вектора на матрицу в миллисекундах: " + (endTime - startTime));
  136.  
  137.  
  138.     }
  139. }
RAW Paste Data