Instituto Tecnológico Superior de Felipe Carrillo Puerto Ingeniería en Sistemas Computacionales Materia: Tópicos Avanzados de Programación Docente: Dr. Niels Henryk Aranda Cuevas Reporte Técnico Unidad 4: Programación concurrente (multihilos) Integrantes: Chable Pat Jhonny Gabriel Balam Yam Wilberth Ayala Mutul Ezer Abizai Vega Segura Adrián Asís Poot Tuz Efraín Antonio Aké Pech Jorge Manuel Semestre: 4 th Aula: J-3 Grupo: “a” Ciclo Escolar: Enero – Julio
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Instituto Tecnológico Superior de Felipe Carrillo Puerto
Ingeniería en Sistemas Computacionales
Materia: Tópicos Avanzados de Programación
Docente: Dr. Niels Henryk Aranda Cuevas
Reporte Técnico
Unidad 4: Programación concurrente (multihilos)
Integrantes:
Chable Pat Jhonny Gabriel
Balam Yam Wilberth
Ayala Mutul Ezer Abizai
Vega Segura Adrián Asís
Poot Tuz Efraín Antonio
Aké Pech Jorge Manuel
Semestre: 4th
Aula: J-3 Grupo: “a”
Ciclo Escolar: Enero – Julio
Unidad 4: Programación concurrente (multihilos)
Fundamentos De Programación Concurrente
• Un programa multihilo contiene dos o más partes que pueden ejecutarse de forma concurrente. Cada parte de ese programa se llama hilo (thread) y cada hilo establece un camino de ejecución independiente. Es un tipo de multitarea distinta a la multitarea por procesos, la cual ejecuta varios programas a la vez. En Java, es un solo programa con varios hilos a la vez. A continuación se iniciará el desarrollo de un ejemplo sencillo de hilos en java.
1. Ingresa a NetBeans y crea un proyecto tipo Java Application de la categoría
Java. Nombre este proyecto como dskHilos. 2. Pulse sobre el nombre del proyecto dskHilos y en el menú de contexto que
se muestra seleccione Java Package… de la opción Nuevo. Nombre esta carpeta Logica.
3. Repita el paso anterior y cree otro paquete denominado Fisica 4. Una vez creados los paquetes pulse con el botón derecho del mouse sobre
el paquete Fisica y cree un objeto JFrame de nombre FormaHilos. 5. En JFrame creado insertar 4 tablas JTable, una en la parte superior donde
se almacenan los resultados, y tres del mismo tamaño en la parte inferior. Cada tabla simulara valores expresados como movimientos de cada jugador. Ubica una serie de etiquetas y botones. Las tres etiquetas que aparecen debajo de los JTable se denominan lblJugador1, lblJugador2 y lblJugador3, respectivamente. Más debajo de éstas aparecen 3 botones de nombre: btnJugar, btnReinicioJuego y btnGenerarTabla.
6. Ahora proceda a crear las clases en el paquete Logica que permitirán el funcionamiento de los tres jugadores. Procede a crear la primera clase nómbrala clsJugador1. El código es el siguiente:
Código: clsJugador1.
package Logica;
import javax.swing.JOptionPane;
public class clsJugador1 extends Thread{
private int numero;
private String nombre;
private boolean continuar = true;
//Constructor
public clsJugador1()
{
numero = 1; //le asigna el numero 1 al jugador 1.
nombre = JOptionPane.showInputDialog(null,"Digite el nombre del
Jugador 1: ");
}
public int getNumero(){return numero;} //para devolver el número del
jugador
public String getNombre(){return nombre;}
public Fisica.FormaHilos formHilo; //declara una variable de tipo
FormaHilos
public clsJugador1(Fisica.FormaHilos aThis) { //constructor que
recibe
formHilo = aThis; //defecto el formulario FormaHilos y lo asigna
a formHilo.
}
public void detenerHilo()
{ //método para detener la ejecución del hilo.
continuar = false;
}
@Override //se sobrescribe el método run
@SuppressWarnings("SleepWhileInLoop")
public void run()
{
while (continuar) { //hágase mientras continuar sea
verdadero
try {
int avance = (int) (Math.random() * 4); //establece el avance
de jugador 1
formHilo.moverJugador1(avance); //invoca al método
moverJugador1 que se encuentra en el formulario FormaHilos
continuar = formHilo.seguir; //para validar si
se debe continuar.
Thread.sleep(150); //descansa por 15
segundos...
} catch (InterruptedException ex) {
System.out.checkError();
}
}
}
}
Código: clsJugador2.
package Logica;
import javax.swing.JOptionPane;
public class clsJugador2 extends Thread{
private int numero;
private String nombre;
private boolean continuar = true;
public clsJugador2() {
numero = 2; //le asigna el numero 2 al jugador 2.
nombre = JOptionPane.showInputDialog(null,"Digite el nombre del Jugador
2.");
}
public int getNumero(){return numero;} //para devolver el numero del
jugador
public String getNombre(){return nombre;}
public Fisica.FormaHilos formHilo; //declara una variable de tipo
FormaHilos
public clsJugador2(Fisica.FormaHilos aThis) { //constructor que recibe por
formHilo = aThis; //defecto el formulario FormaHilos y lo asigna a formHilo.
}
public void detenerHilo(){ //método para detener la ejecución del hilo.
continuar = false;
}
@Override //se sobrescribe el método run
public void run()
{
while (continuar) { //hágase mientras continuar sea verdadero
try {
int avance = (int) (Math.random() * 4); //establece el avance de jugador
2
formHilo.moverJugador2(avance); //invoca al método moverJugador2 que se
//encuentra en el formulario FormaHilos
continuar = formHilo.seguir; //para validar si se debe continuar.
Thread.sleep(150); //descansa por 15 segundos...
} catch (InterruptedException ex) {
} //Fin catch
} //Fin try
} //Fin método Run
} //Fin de la clase
Código: clsJugador3. package Logica;
import javax.swing.JOptionPane;
public class clsJugador3 extends Thread {
private int numero;
private String nombre;
private boolean continuar = true;
public clsJugador3() {
numero = 3; //le asigna el numero 3 al jugador 3.
nombre = JOptionPane.showInputDialog(null,"Digite el nombre del Jugador
3.");
}
public int getNumero(){return numero;} //para devolver el numero del
jugador
public String getNombre(){return nombre;}
public Fisica.FormaHilos formHilo; //declara una variable de tipo
FormaHilos
public clsJugador3(Fisica.FormaHilos aThis) { //constructor que recibe por
formHilo = aThis; //defecto el formulario FormaHilos y lo asigna a formHilo.
}
public void detenerHilo(){ //método para detener la ejecución del hilo.
continuar = false;
}
@Override //se sobrescribe el método run
public void run()
{
while (continuar) { //hágase mientras continuar sea verdadero
try {
int avance = (int) (Math.random() * 4); //establece el avance de jugador
1
formHilo.moverJugador3(avance); //invoca al método moverJugador3 que se
//encuentra en el formulario FormaHilos
continuar = formHilo.seguir; //para validar si se debe continuar.
Thread.sleep(150); //descansa por 15 segundos...
} catch (InterruptedException ex) {
} //Fin catch
} //Fin try
} //Fin Run
} //Fin clase
Una vez que se ha escrito el código para las tres clases que procesarán a cada jugador, proceda a escribir el código que radicará en el formulario principal (FormaHilos.Java) Dicho código es el siguiente: package Fisica;
import Logica.clsJugador1;
import Logica.clsJugador2;
import Logica.clsJugador3;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
public class FormaHilos extends javax.swing.JFrame {
javax.swing.table.DefaultTableModel modeloTabla = new
javax.swing.table.DefaultTableModel();
javax.swing.table.DefaultTableModel modTablaJugador1 = new
javax.swing.table.DefaultTableModel();
javax.swing.table.DefaultTableModel modTablaJugador2 = new
javax.swing.table.DefaultTableModel();
javax.swing.table.DefaultTableModel modTablaJugador3 = new
javax.swing.table.DefaultTableModel();
Object[] filas = new Object[24];
Object[] datosJugador1 = new Object[3]; //columnas celdaAvance,
Object[] datosJugador2 = new Object[3];
Object[] datosJugador3 = new Object[3];
public Boolean seguir = true;
int celdaJugador1=0;
int celdaJugador2=0;
int celdaJugador3=0;
int p=0;int q=0; int m=0;
//Se instancias las clases que están en otro paquete (Logica)