Package com.data.struct;
Import Java.util.concurrent.CountDownLatch; public class Multithreadmatrixmultipy {static Int[][]a=new int[][]{{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {1
	3,14,15,16}};
	Static int[][]b=new int[][]{{1,3,5,7}, {2,4,6,8}, {11,13,15,17}, {12,14,16,18}};
	
	Static Int[][]c=new Int[a.length][a.length]; private static void Matrixfirstloop (Int[][]a,int[][]b,int[][]c,int i,int i2,countdownlatch CDL) throws exception{if (i=
			=I2) {Countdownlatch cd=new countdownlatch (2);
		Matrixsecondloop (A,B,C,I,0,B.LENGTH-1,CD);
			}else{int mid= (I+I2)/2;
			New Maxtrixfirstthread (A,B,C,I,MID,CDL). Start ();
			New Maxtrixfirstthread (A,B,C,MID+1,I2,CDL). Start ();
		Cdl.await (); }} private static void Matrixsecondloop (Int[][]a,int[][]b,int[][]c,int i,int j,int j2,countdownlatch CDL) throws Excep
		tion{int n=c.length;
			if (j==j2) {c[i][j]=0;
			for (int k=0;k<n;k++) {c[i][j]=c[i][j]+a[i][k]*b[k][j]; }}else{int mid2= (J+J2)/2;
			New Maxtrixsecondthread (A,B,C,I,J,MID2,CDL). Start ();
			New Maxtrixsecondthread (A,B,C,I,MID2+1,J2,CDL). Start ();
			
		Cdl.await ();
		} private static class Maxtrixfirstthread extends thread{private int[][]a;
		Private int[][]b;
		Private int[][]c;
		private int i;
		private int i2;;
		Private Countdownlatch CDL;
			Public Maxtrixfirstthread (Int[][]a,int[][]b,int[][]c,int i,int i2,countdownlatch CDL) {this.a=a;
			This.b=b;
			This.c=c;
			This.i=i;
			This.i2=i2;
		THIS.CDL=CDL;
				@Override public void Run () {try {countdownlatch cdlnext=new countdownlatch (2);
				Matrixfirstloop (A,b,c,i,i2, Cdlnext);
			Cdl.countdown ();
			catch (Exception e) {//TODO auto-generated catch block E.printstacktrace ();
		}} private static class Maxtrixsecondthread extends thread{private int[][]a;
		Private int[][]b;
		Private int[][]c;
		private int J;
		private int J2;
		private int i;
		Private Countdownlatch CDL; Public MaxtrixsecondthrEAD (int[][]a,int[][]b,int[][]c,int i,int j,int j2,countdownlatch CDL) {this.a=a;
			This.b=b;
			This.c=c;
			This.j=j;
			This.j2=j2;
			THIS.CDL=CDL;
		This.i=i;
				@Override public void Run () {try {countdownlatch cdlnext=new countdownlatch (2);
				Matrixsecondloop (A,b,c,i,j,j2, Cdlnext);
			Cdl.countdown ();
			catch (Exception e) {//TODO auto-generated catch block E.printstacktrace ();
		}} private static int[][] ordernarymultipy (int [] [] a,int[][]b) {int n=a.length;
		int [] [] c=new int[n][n];
				for (int i=0;i<n;i++) {for (int j=0;j<n;j++) {for (int k=0;k<n;k++) {c[i][k]+=a[i][j]*b[j][k];
	}} return C; public static void Printc () {for (int i=0;i<c.length;i++) {for (int j=0;j<c[i].length;j++) {SYSTEM.OUT.P
			Rint (c[i][j]+ "");
		} System.out.println ();
		} public static void Main (string[] args) throws Exception {Countdownlatch cdlnext=new countdownlatch (2); Matrixfirstloop (a,b,c,0,A.length-1,cdlnext);
		Cdlnext.await ();
	PRINTC ();
 }
}