package hilos;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
*
* @author Rafa G
*/
public class Main {
public static void main(String[] args) throws InterruptedException {
int tamano=6000;
long sumaMatriz=0;
Matriz matriz = new Matriz(tamano);
matriz.llenarMatriz(); //llamamos al metodo que llenara la matriz
long tinicio=System.currentTimeMillis(); //Tiempo inicio
//Realiza la suma normal de los valores de la matriz
for (int i=0; i<tamano; i++){
for (int j=0; j<tamano; j++){
sumaMatriz = sumaMatriz+matriz.matriz[i][j];
}
}
long tfinal=System.currentTimeMillis();//tiempo fin
System.out.println("La suma sin threads es: " +sumaMatriz+" tiempo: "+(tfinal-tinicio));
//crea los threads
ThreadSuma suma1 = new ThreadSuma(tamano, 0, 1000, matriz);
ThreadSuma suma2 = new ThreadSuma(tamano, 1000, 2000, matriz);
ThreadSuma suma3 = new ThreadSuma(tamano, 2000, 3000, matriz);
ThreadSuma suma4 = new ThreadSuma(tamano, 3000, 4000, matriz);
ThreadSuma suma5 = new ThreadSuma(tamano, 4000, 5000, matriz);
ThreadSuma suma6 = new ThreadSuma(tamano, 5000, 6000, matriz);
ExecutorService executor = Executors.newCachedThreadPool();
long tiinicio=System.currentTimeMillis();
//Ejecuta los threads
executor.execute(suma1);
executor.execute(suma2);
executor.execute(suma3);
executor.execute(suma4);
executor.execute(suma5);
executor.execute(suma6);
executor.shutdown();
boolean tasksEnded = executor.awaitTermination(1, TimeUnit.MINUTES);
if ( tasksEnded ){
long tifinal=System.currentTimeMillis();
System.out.println("La suma Con Threads es: " +matriz.getSuma()+" tiempo: "+(tifinal-tiinicio));
}
}
}