Java - Programación multihilo

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Programación multihilo

Publicado por Josh (5 intervenciones) el 27/11/2018 19:34:57
Buenas tardes alguien puede echarme una mano con el siguiente ejercicio?

Se debe crear una aplicación que nos muestre la tabla de multiplicar de los números del 1 al 10. Para ello crearemos una aplicación multihilo con las siguientes características:



El hilo principal debe ser capaz de crear un hilo por cada una de las tablas de multiplicar.

Los hilos hijo se encargarán de realizar las operaciones de multiplicación y el almacenamiento del resultado para su posterior visualización.

Al terminar la ejecución de un hilo hijo, se enviará el resultado al hilo principal para que este lo muestre por pantalla.

Al terminar la ejecución de todos los hilos, el hilo principal mostrará la información con el resultado de las operaciones de la siguiente forma:

******************************************

* PSP - Tarea Individual 2 *

******************************************

* Nombre y apellidos del Alumno *

******************************************

* DNI del alumno *

******************************************

Resultado de las operaciones:

- Tabla del X:

....

- Tabla del Y:

....

El orden de las tablas mostradas será el orden en el que los hilos van terminando las tareas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Programación multihilo

Publicado por Kabuto (1381 intervenciones) el 27/11/2018 21:15:14
Hola,

el tema Threads es una de las cosas que tengo pendientes de familiarizarme y tu ejercicio me ha parecido una buena oportunidad para meterle mano.
Echando un vistazo a la API de Oracle como propone Tom, he dado con una solución, que no se si es la mejor, pero parece cumplir con lo que se pide.

Una de las formas de lanzar un proceso mediante un hilo, es crear una clase que implemente la interfaz Runnable y que se encargue de realizar la tarea que necesitemos.
Así que lo que he hecho es crear una clase que implemente dicha interfaz y se encargara de generar una tabla de multiplicar.
Le he puesto un atributo llamado "valor" al cuál le pasaremos un int mediante el constructor. De este modo, si queremos que nos genere la tabla del 1, le pasaremos un 1.
Si queremos la tabla del 2, le pasaremos un 2, etc...

Al implementar la interfaz Runnable, obligatoriamente hay que sobreescribir un método llamado run(), que es el método que se activa cuando lanzamos el objeto de nuestra clase, por un Thread(hilo) propio.
Y es dentro del run() donde mediante un bucle, hago las multiplicaciones del valor recibido por el constructor y construye un String con cada multiplicacion para dar formato a la tabla de multiplicar.
Cuando el bucle ha terminado de hacer las multiplicaciones, imprime en pantalla el String que representa la tabla de multiplicar.

Este sería el código, es muy sencillo, unas pocas líneas en realidad.

Clase Multiplica
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package tablasMultiHilo;
 
public final class Multiplica implements Runnable{
 
	int valor;
 
	public Multiplica(int valor) {
		this.valor = valor;
	}
 
	@Override
	public void run() {
		StringBuilder tabla = new StringBuilder();
		tabla.append("\nTabla del " + valor);
		for (int i = 0; i < 10; i++)
			tabla.append(String.format("\n%2d x %2d = %2d", valor, i, (valor * i)));
		System.out.println(tabla.toString());
	}
 
}

Vale, esta sería nuestra clase Multiplica a partir de la cuál podemos generar hilos de ejecucion separados ya que implementa la interfaz Runnable

Ahora viene la clase principal, la cual ha de lanzar 10 hilos de ejecución, uno por cada tabla que queremos generar, y mostrar los resultados en pantalla.
En esta clase lo que haremos será:
- Mostramos la cabecera de presentacion con datos de alumno y tal, tal como pide el enunciado.
- Instanciamos 10 objetos Thread, a cada uno le pasaremos un objeto de nuestra clase Multiplica en cuyos constructores le pasamos números del 1 al 10, que son las tablas que queremos generar.
- Una vez estan todos instanciados, ponemos en marcha sus hilos de ejecución invocando su método .start()
- Conforme cada Thread termina de crear la tabla, la imprime en pantalla.
- Puede apreciarse que el orden en el que terminan va variando cada vez que ejecutamos el programa. No siempre acaban en el mismo orden.

Este sería el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package tablasMultiHilo;
 
public final class Tablas {
 
	public static void main(String[] args) {
		System.out.println("******************************************\r\n" +
				"\r\n" +
				"* PSP - Tarea Individual 2 *\r\n" +
				"\r\n" +
				"******************************************\r\n" +
				"\r\n" +
				"* Nombre y apellidos del Alumno *\r\n" +
				"\r\n" +
				"******************************************\r\n" +
				"\r\n" +
				"* DNI del alumno *\r\n" +
				"\r\n" +
				"******************************************\r\n" +
				"\r\n" +
				"Resultado de las operaciones: ");
 
		//Instanciamos los hilos que generan tablas de multiplicar
		Thread tabla1 = new Thread(new Multiplica(1));
		Thread tabla2 = new Thread(new Multiplica(2));
		Thread tabla3 = new Thread(new Multiplica(3));
		Thread tabla4 = new Thread(new Multiplica(4));
		Thread tabla5 = new Thread(new Multiplica(5));
		Thread tabla6 = new Thread(new Multiplica(6));
		Thread tabla7 = new Thread(new Multiplica(7));
		Thread tabla8 = new Thread(new Multiplica(8));
		Thread tabla9 = new Thread(new Multiplica(9));
		Thread tabla10 = new Thread(new Multiplica(10));
		//Los ponemos en marcha
		tabla1.start();
		tabla2.start();
		tabla3.start();
		tabla4.start();
		tabla5.start();
		tabla6.start();
		tabla7.start();
		tabla8.start();
		tabla9.start();
		tabla10.start();
	}
 
}


Y ya está, eso es todo. Mucho más fácil de lo que parece.
Cualquier duda o pregunta, posteala por aquí.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Programación multihilo

Publicado por Josh (5 intervenciones) el 28/11/2018 09:31:12
Muchas gracias Sr. Kabuto, es usted un mago, estoy empezando, pero espero con la practica alcanzar una mente preclara como la suya, está claro como el agua, a pesar de que no era capaz de verlo...

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar