-
[Develop] 다중쓰레드로 40x40행렬 곱셈 계산Mhwan's Develope/JAVA 2020. 1. 3. 00:24
## 기능
- 자바의 대표적인 장점인 다중쓰레드를 연습하기 위해 다중쓰레드로 40x40행렬 곱셈 계산
- 두개의 40x40행렬을 arguments로 넣어 실행시키면 결과행렬을 c.dat에 저장
## 간단 설명 및 알고리즘
- Runnable 객체를 상속 받은 클래스를 만들어 쓰레드로 생성
123456789101112131415161718public class MatrixRunner implements Runnable {private Matrix matrix;private int start, end;public MatrixRunner(Matrix matrix, int start, int end) {this.matrix = matrix;this.start = start;this.end = end;}@Overridepublic void run() {try{matrix.multiplyMatrix(start, end);} finally {matrix.printPartMatrix(start, end, Thread.currentThread().getName());}}}cs - 실제 행렬이 있고 행렬의 계산이 이루어지는 하나의 클래스 인스턴스를 만들고 각 쓰레드는 동시적으로 Matrix 인스턴스에 접근하여 계산을 진행
12345678910111213141516171819202122232425262728293031323334353637383940public class Matrix {private int[][] matrixA, matrixB, matrixC;private int size;public Matrix(int[][]matrixA, int[][]matrixB, int size){this.matrixA = matrixA;this.matrixB = matrixB;this.size = size;matrixC = new int[size][size];}public void multiplyMatrix(int start, int end){for (int s = start; s<= end; s++) {for (int i = 0; i < size; i++) {int sum = 0;for (int j = 0; j < size; j++)sum += (matrixA[i][j] * matrixB[j][s]);matrixC[i][s] = sum;}}}public synchronized void printPartMatrix(int s, int e, String thName){System.out.println("---"+thName+"["+s+", "+e+"]---");for(int i = 0; i<size; i++){for(int j = s; j<=e; j++)System.out.printf("%5d", matrixC[i][j]);System.out.println();}}public void printResultMatrix(){MatrixWriter.writeFile("c.dat", matrixC);System.out.println("finally result : ");for (int i = 0; i<size; i++){for (int j = 0; j<size; j++)System.out.printf("%5d ", matrixC[i][j]);System.out.println();}}}cs ## 링크
Github : https://github.com/mhwan/MultiThread
'Mhwan's Develope > JAVA' 카테고리의 다른 글
[Develop] OS 메모리 할당 알고리즘 (0) 2020.01.03 [Tip] 날짜 관련 유용하게 쓰일 변환하는 법 (Using SimpleDateFormat) (0) 2016.11.02 [Tip] 문자열 바이트 세기 (String Text Byte) (0) 2016.10.27 [Tip] JAVA 각종 유용한 정규식 (0) 2016.10.25