SUBANGKAR

Offline_Nov-4_Araf

Nov 4th, 2016
135
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package threading;
  2.  
  3. import java.util.*;
  4.  
  5.  
  6. class WorkItem {
  7.    
  8.     int[] array1;
  9.     int[] array2;
  10.     int row;
  11.     int column;
  12.    
  13.     public WorkItem( int[] array1, int[] array2, int row, int column ) {
  14.         this.array1 = array1;
  15.         this.array2 = array2;
  16.         this.row = row;
  17.         this.column = column;
  18.     }
  19. }
  20.  
  21.  
  22. class workerThread implements Runnable {
  23.     Thread t;
  24.     Queue q_workItem = null;
  25.     WorkItem w;
  26.     int totalMultnos;
  27.     int[][] resultMat;
  28.    
  29.     workerThread( Queue q_workItem, int totalMultnos, int[][] resultMat ) {
  30.         this.resultMat = resultMat;
  31.         this.q_workItem = q_workItem;
  32.         t = new Thread( this );
  33.         this.totalMultnos = totalMultnos;
  34.         t.start();
  35.     }
  36.    
  37.     @Override
  38.     public void run() {
  39.        
  40.         for (int i = 0; i < totalMultnos; i++) {
  41.             synchronized (q_workItem) {
  42.                 w = (WorkItem) q_workItem.remove();
  43.             }
  44.            
  45.             long res = 0;
  46.             for (int j = 0; j < w.array1.length; j++) {
  47.                 res = res + w.array1[j] * w.array2[j];
  48.             }
  49.            
  50.             resultMat[w.row][w.column] = (int) res;
  51.         }
  52.     }
  53.    
  54.     void finish() {
  55.         try {
  56.             t.join();
  57.         } catch (InterruptedException e) {
  58.             e.printStackTrace();
  59.         }
  60.     }
  61. }
  62.  
  63. class Test4 {
  64.    
  65.     public static void main( String[] args ) {
  66.         Scanner scn = new Scanner( System.in );
  67.        
  68.         System.out.println( "Enter Row & Colm of MatA : " );
  69.         int row = scn.nextInt();
  70.         int col = scn.nextInt();
  71.        
  72.         System.out.println( "Enter Row & Colm of MatB : " );
  73.         int row2 = scn.nextInt();
  74.         int col2 = scn.nextInt();
  75.        
  76.         System.out.println( "Enter W : " );
  77.         int threadNum = scn.nextInt();
  78.         int n = (row * col2) / threadNum;
  79.        
  80.         int[][] resMat = new int[row][col2];
  81.        
  82.         workerThread WT[] = new workerThread[threadNum];
  83.        
  84.         System.out.println( "Enter MatA : " );
  85.         int[][] a = new int[row][col];
  86.         for (int i = 0; i < row; i++) {
  87.             for (int j = 0; j < col; j++) {
  88.                 a[i][j] = scn.nextInt();
  89.             }
  90.         }
  91.        
  92.         System.out.println( "Enter MatB : " );
  93.         int[][] b = new int[row2][col2];
  94.         for (int i = 0; i < row2; i++) {
  95.             for (int j = 0; j < col2; j++) {
  96.                 b[i][j] = scn.nextInt();
  97.             }
  98.         }
  99.        
  100.        
  101.         int transpose[][] = new int[b[0].length][b.length];
  102.         for (int c = 0; c < row2; c++) {
  103.             for (int d = 0; d < col2; d++) {
  104.                 transpose[d][c] = b[c][d];
  105.             }
  106.         }
  107.        
  108.         Queue qW = new LinkedList< WorkItem >();
  109.        
  110.         for (int i = 0; i < a.length; i++) {
  111.             for (int j = 0; j < transpose.length; j++) {
  112.                 WorkItem tmp = new WorkItem( a[i], transpose[j], i, j );
  113.                 qW.add( tmp );
  114.             }
  115.         }
  116.        
  117.         for (int i = 0; i < threadNum; i++) {
  118.             WT[i] = new workerThread( qW, n, resMat );
  119.         }
  120.        
  121.         for (int i = 0; i < WT.length; i++) {
  122.             WT[i].finish();
  123.         }
  124.        
  125.        
  126.         for (int i = 0; i < resMat.length; i++) {
  127.             for (int j = 0; j < resMat[0].length; j++) {
  128.                 System.out.print( resMat[i][j] + " " );
  129.             }
  130.             System.out.println( "" );
  131.         }
  132.        
  133.     }
  134. }
RAW Paste Data