Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package threading;
- import java.util.*;
- class WorkItem {
- int[] array1;
- int[] array2;
- int row;
- int column;
- public WorkItem( int[] array1, int[] array2, int row, int column ) {
- this.array1 = array1;
- this.array2 = array2;
- this.row = row;
- this.column = column;
- }
- }
- class workerThread implements Runnable {
- Thread t;
- Queue q_workItem = null;
- WorkItem w;
- int totalMultnos;
- int[][] resultMat;
- workerThread( Queue q_workItem, int totalMultnos, int[][] resultMat ) {
- this.resultMat = resultMat;
- this.q_workItem = q_workItem;
- t = new Thread( this );
- this.totalMultnos = totalMultnos;
- t.start();
- }
- @Override
- public void run() {
- for (int i = 0; i < totalMultnos; i++) {
- synchronized (q_workItem) {
- w = (WorkItem) q_workItem.remove();
- }
- long res = 0;
- for (int j = 0; j < w.array1.length; j++) {
- res = res + w.array1[j] * w.array2[j];
- }
- resultMat[w.row][w.column] = (int) res;
- }
- }
- void finish() {
- try {
- t.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- class Test4 {
- public static void main( String[] args ) {
- Scanner scn = new Scanner( System.in );
- System.out.println( "Enter Row & Colm of MatA : " );
- int row = scn.nextInt();
- int col = scn.nextInt();
- System.out.println( "Enter Row & Colm of MatB : " );
- int row2 = scn.nextInt();
- int col2 = scn.nextInt();
- System.out.println( "Enter W : " );
- int threadNum = scn.nextInt();
- int n = (row * col2) / threadNum;
- int[][] resMat = new int[row][col2];
- workerThread WT[] = new workerThread[threadNum];
- System.out.println( "Enter MatA : " );
- int[][] a = new int[row][col];
- for (int i = 0; i < row; i++) {
- for (int j = 0; j < col; j++) {
- a[i][j] = scn.nextInt();
- }
- }
- System.out.println( "Enter MatB : " );
- int[][] b = new int[row2][col2];
- for (int i = 0; i < row2; i++) {
- for (int j = 0; j < col2; j++) {
- b[i][j] = scn.nextInt();
- }
- }
- int transpose[][] = new int[b[0].length][b.length];
- for (int c = 0; c < row2; c++) {
- for (int d = 0; d < col2; d++) {
- transpose[d][c] = b[c][d];
- }
- }
- Queue qW = new LinkedList< WorkItem >();
- for (int i = 0; i < a.length; i++) {
- for (int j = 0; j < transpose.length; j++) {
- WorkItem tmp = new WorkItem( a[i], transpose[j], i, j );
- qW.add( tmp );
- }
- }
- for (int i = 0; i < threadNum; i++) {
- WT[i] = new workerThread( qW, n, resMat );
- }
- for (int i = 0; i < WT.length; i++) {
- WT[i].finish();
- }
- for (int i = 0; i < resMat.length; i++) {
- for (int j = 0; j < resMat[0].length; j++) {
- System.out.print( resMat[i][j] + " " );
- }
- System.out.println( "" );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement