SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
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)
clsJugador1 jug1 = new clsJugador1();
clsJugador2 jug2 = new clsJugador2();
clsJugador3 jug3 = new clsJugador3();
public FormaHilos() {
initComponents();
//Creamos los componentas Tipo Etiqueta
JLabel
Nombre1=lblNombreJug1,Nombre2=lblNombreJug2,Nombre3=lblNombreJug3;
cargarTabla();
//Creamos las etiquetas y le damos formato de fuente y tamaño
Nombre1.setText("Jugador : "+jug1.getNombre().toUpperCase());
Nombre1.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
Nombre2.setText("Jugador "+jug2.getNombre().toUpperCase());
Nombre2.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
Nombre3.setText("Jugador : "+jug3.getNombre().toUpperCase());
Nombre3.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
}
void cargarDetalle() {
for (int i=0;i<24;i++){
filas[i]=0; }
for(int x=1;x<=3;x++){
int numero = (int) (Math.random()*22+1); //para generar los
numeros.
filas[numero]= -1; }
modeloTabla.addRow(filas); //carga el modelo con los datos
obtenidos
Tabla.setModel(modeloTabla); //carga el modelo en JTab
//tabEmpleados
}
private void cargarTabla(){
for (int i=1;i<=24;i++){
modeloTabla.addColumn(String.valueOf(i)); }
cargarDetalle();
}
public void limpiarTabla(javax.swing.JTable miTabla)
{
DefaultTableModel modelo = (DefaultTableModel)
miTabla.getModel();
while(modelo.getRowCount()>0)
modelo.removeRow(0);
celdaJugador1=0;
celdaJugador2=0;
celdaJugador3=0;
seguir = true;
}
void confTablaJugadores(javax.swing.table.DefaultTableModel Modelo)
{
Modelo.addColumn("Celda Avance");
Modelo.addColumn("Contenido de la Celda");
Modelo.addColumn("Celda Actual");
}
public void moverJugador1(int celda) {
try{
celdaJugador1+=celda;
if (celdaJugador1 >= 24 && seguir == true )
{
celdaJugador1=24;
seguir = false;
JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador
No."+String.valueOf(jug1.getNumero()) +", " +
jug1.getNombre().toUpperCase());
} //aqui gana el jugador...
if (celdaJugador1 <= 24) {
Object valorCelda = Tabla.getValueAt(0,celdaJugador1);
if ( "-1".equals(valorCelda.toString())) celdaJugador1 = 0;
if (p == 0) {confTablaJugadores(this.modTablaJugador1);p=1;}
datosJugador1[0]=String.valueOf(celda);
datosJugador1[1]=valorCelda;
datosJugador1[2]=celdaJugador1;
modTablaJugador1.addRow(datosJugador1);
tablaJugador1.setModel(modTablaJugador1);
JLabel Jugad1=lblJugador1;
Jugad1.setText("Interacciones:
"+String.valueOf(modTablaJugador1.getRowCount()));
Jugad1.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
}
} catch (Exception ex){
System.out.printf(ex.getMessage());
seguir = false;
}
}
public void moverJugador2(int celda) {
try{
celdaJugador2+=celda;
if (celdaJugador2 >= 24 && seguir == true ) {
celdaJugador2=24;
seguir = false;
JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador
No."+String.valueOf(jug2.getNumero()) +
", " + jug2.getNombre().toUpperCase());
} //aqui gana el jugador...
if (celdaJugador2 <= 24) {
Object valorCelda = Tabla.getValueAt(0,celdaJugador2);
if ( "-1".equals(valorCelda.toString()))
celdaJugador2 = 0;
if (q == 0) {
confTablaJugadores(this.modTablaJugador2);q=1;}
datosJugador2[0]=String.valueOf(celda);
datosJugador2[1]=valorCelda;
datosJugador2[2]=celdaJugador2;
modTablaJugador2.addRow(datosJugador2);
tablaJugador2.setModel(modTablaJugador2);
JLabel Jugad2=lblJugador2;
Jugad2.setText("Interacciones:
"+String.valueOf(modTablaJugador2.getRowCount()));
Jugad2.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
}
} catch (Exception ex){
System.out.printf(ex.getMessage());
seguir = false; }
}
public void moverJugador3(int celda) {
try{
celdaJugador3+=celda;
if (celdaJugador3 >= 24 && seguir == true ) {
celdaJugador3=24;
seguir = false;
JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador
No."+String.valueOf(jug3.getNumero()) +
", " + jug3.getNombre().toUpperCase());
} //aqui gana el jugador
if (celdaJugador3 <= 24) {
Object valorCelda = Tabla.getValueAt(0,celdaJugador3);
if ( "-1".equals(valorCelda.toString())) celdaJugador3 = 0;
if (m == 0) {confTablaJugadores(this.modTablaJugador3);m=1;}
datosJugador3[0]=String.valueOf(celda);
datosJugador3[1]=valorCelda;
datosJugador3[2]=celdaJugador3;
modTablaJugador3.addRow(datosJugador3);
tablaJugador3.setModel(modTablaJugador3);
JLabel Jugad3=lblJugador3;
Jugad3.setText("Interacciones:
"+String.valueOf(modTablaJugador3.getRowCount()));
Jugad3.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
}
} catch (Exception ex)
{
System.out.printf(ex.getMessage());
seguir = false;
}
}
Código botón btnReiniciarJuego
private void btnReiniciarJuegoActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
limpiarTabla(this.tablaJugador1);
limpiarTabla(this.tablaJugador2);
limpiarTabla(this.tablaJugador3);
btnJugar.setEnabled(true);
btnReiniciarJuego.setEnabled(false);
lblJugador1.setText("Interacciones: 0");
lblJugador2.setText("Interacciones: 0");
lblJugador3.setText("Interacciones: 0");
}
Código botón btnGenerarTabla
private void btnGenerarTablaActionPerformed(java.awt.event.ActionEvent
evt){
// TODO add your handling code here:
modeloTabla.removeRow(0);
Tabla.setModel(modeloTabla);
cargarDetalle();
}
Código botón btnJugar
private void btnJugarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
clsJugador1 j1;
j1 = new clsJugador1(this);
clsJugador2 j2;
j2 = new Logica.clsJugador2(this);
clsJugador3 j3;
j3 = new Logica.clsJugador3(this);
j1.start();
j2.start();
j3.start();
if (seguir == false)
{
j1 = null;
j2 = null;
j3 = null;
}
btnJugar.setEnabled(false);
btnReiniciarJuego.setEnabled(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new FormaHilos().setVisible(true);
} //Fin Run
});
} //Fin Main
CONCLUSIÓN
BALAM YAM WILBERTH:
En esta cuarta unidad abarcamos el tema de la programación en hilos o
programación concurrente, que nos ayuda a que nuestro software realice varias
tareas “Simultáneamente”. Y eso nos puede resolver varios problemas en el
desarrollo de software.
POOT TUZ EFRAIN ANTONIO
En la unidad cuatro vimos lo que son los hilos los hilos en java son básicamente en
forma para poder ejecutar varios procesos simultáneamente en nuestros programas
en java para poder ver o crear los hilos tenemos que crear una clase Thread o
reescribir el método principal “rum()”” el cual se va a ejecutar principalmente al inicial
un hilo, Thread o un nuevo proceso en java.
AYALA MUTUL EZER ABISAI
En la unidad cuatro se desarrolló una aplicación de escritorio, donde se aplicó el
funcionamiento de packages que vimos en la unidad anterior, igual vimos cómo
aplicar como aplicar el funcionamiento de hilos esto nos ayudara al manejo de
varias tareas simultaneas.
AKE PECH JORGE MANUEL
Aprendimos a hacer programación en hilos en la cual son procesos independientes
en la cual se está ejecutando programas. Y eso nos ayuda mucho en el momento
de desarrollar un software.
CHABLE PAT JHONNY GABRIEL
En esta unidad realizamos algunas prácticas con los multihilos y aprendimos que
los hilos son un conjunto de acciones independientes que se activan durante la
ejecución de un programa. Que son útiles cuando se necesitan realizar varias
acciones a la vez de manera organizada sin afectar otras funciones en un programa.
Lo mejor que hemos aprendido en esta unidad es saber implementar los hilos en
nuestros programas, para realizar diferentes acciones determinadas. Y para
finalizar, aprendimos a utilizar el código que se utiliza.
VEGA SEGURA ADRIÁN ASÍS
En esta unidad vimos lo que la programación concurrente y su utilidad en el
software. Podemos decir que un programa multi hilo contiene dos o más partes que
pueden ejecutarse de forma concurrente. El programa contiene hilos que viene
siendo como caminos con su propio código. Se puede ejecutar paras hilos a la vez
pero es muy diferente a los procesos porque los procesos son independientes y los
hilos forman parte de un solo programa.

Más contenido relacionado

La actualidad más candente

Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)CodeSyntax
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc X
 
C6 net beansentradasysalidas
C6 net beansentradasysalidasC6 net beansentradasysalidas
C6 net beansentradasysalidasalenco
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de controlElena Perz
 
Programas e informes Programación
Programas e informes ProgramaciónProgramas e informes Programación
Programas e informes ProgramaciónMauricioPumalpa
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc X
 
Jyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc X
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc X
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)jmiguel rodriguez
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 javajbersosa
 

La actualidad más candente (20)

Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)
 
C6 net beansentradasysalidas
C6 net beansentradasysalidasC6 net beansentradasysalidas
C6 net beansentradasysalidas
 
Ejercicios3
Ejercicios3Ejercicios3
Ejercicios3
 
Semana 6 Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2Semana 6   Módulos en Python Entrega 2
Semana 6 Módulos en Python Entrega 2
 
Informe karen jacome
Informe karen jacomeInforme karen jacome
Informe karen jacome
 
Semana 6 Módulos Clases y Objetos
Semana 6   Módulos Clases y ObjetosSemana 6   Módulos Clases y Objetos
Semana 6 Módulos Clases y Objetos
 
Fun consola guia_01
Fun consola guia_01Fun consola guia_01
Fun consola guia_01
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Programas e informes Programación
Programas e informes ProgramaciónProgramas e informes Programación
Programas e informes Programación
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
 
Jyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datosJyoc java-cap16 persistencia. bases de datos
Jyoc java-cap16 persistencia. bases de datos
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Personalizar gui guia_3
Personalizar gui guia_3Personalizar gui guia_3
Personalizar gui guia_3
 
Prog_II_Eventos_guia_2
Prog_II_Eventos_guia_2Prog_II_Eventos_guia_2
Prog_II_Eventos_guia_2
 
Guia1 pii
Guia1 piiGuia1 pii
Guia1 pii
 
Jyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzadoJyoc java-cap21 jse avanzado
Jyoc java-cap21 jse avanzado
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)
 
Programación básica
Programación básicaProgramación básica
Programación básica
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 java
 

Destacado

Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativoKleo Jorgee
 
Mapa conceptual de codigo de lineas
Mapa conceptual de codigo de lineasMapa conceptual de codigo de lineas
Mapa conceptual de codigo de lineasFernando Luz
 
Unidad 2 principios electronicos y aplicaciones digitales (reporte)
Unidad 2 principios electronicos y aplicaciones digitales (reporte)Unidad 2 principios electronicos y aplicaciones digitales (reporte)
Unidad 2 principios electronicos y aplicaciones digitales (reporte)Adrián Vega Segura
 
Practicas de Laboratorio Ingeniería de Las Telecomunicaciones
Practicas de Laboratorio Ingeniería de Las TelecomunicacionesPracticas de Laboratorio Ingeniería de Las Telecomunicaciones
Practicas de Laboratorio Ingeniería de Las Telecomunicacionesymmontillam
 
Mapa conceptual conversion analogico digital
Mapa  conceptual  conversion analogico digitalMapa  conceptual  conversion analogico digital
Mapa conceptual conversion analogico digitalFernando Luz
 
Cuadro comparativo de modulaciones
Cuadro comparativo de modulacionesCuadro comparativo de modulaciones
Cuadro comparativo de modulacionesFernando Luz
 
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicos
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicosFundamentos de Telecomunicaciones - Unidad 1 conceptos basicos
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicosJosé Antonio Sandoval Acosta
 
Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Rodolfo Alcantara Rosales
 
Conversion analogico digital: muestreo, cuantizacion y codificacion
Conversion analogico digital: muestreo, cuantizacion y codificacionConversion analogico digital: muestreo, cuantizacion y codificacion
Conversion analogico digital: muestreo, cuantizacion y codificacionLucre Castillo Lorenzo
 
Procesamiento digital de señales con matlab
Procesamiento digital de señales con matlabProcesamiento digital de señales con matlab
Procesamiento digital de señales con matlabPercy Julio Chambi Pacco
 

Destacado (16)

Reporte unidad3
Reporte unidad3Reporte unidad3
Reporte unidad3
 
Reporte unidad5
Reporte unidad5Reporte unidad5
Reporte unidad5
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
ITO TELECOMUNICACIONES U1
ITO TELECOMUNICACIONES U1ITO TELECOMUNICACIONES U1
ITO TELECOMUNICACIONES U1
 
Reporte unidad1
Reporte unidad1Reporte unidad1
Reporte unidad1
 
Mapa conceptual de codigo de lineas
Mapa conceptual de codigo de lineasMapa conceptual de codigo de lineas
Mapa conceptual de codigo de lineas
 
Unidad 2 principios electronicos y aplicaciones digitales (reporte)
Unidad 2 principios electronicos y aplicaciones digitales (reporte)Unidad 2 principios electronicos y aplicaciones digitales (reporte)
Unidad 2 principios electronicos y aplicaciones digitales (reporte)
 
Practicas de Laboratorio Ingeniería de Las Telecomunicaciones
Practicas de Laboratorio Ingeniería de Las TelecomunicacionesPracticas de Laboratorio Ingeniería de Las Telecomunicaciones
Practicas de Laboratorio Ingeniería de Las Telecomunicaciones
 
Vantanas deslizantes
Vantanas deslizantesVantanas deslizantes
Vantanas deslizantes
 
Mapa conceptual conversion analogico digital
Mapa  conceptual  conversion analogico digitalMapa  conceptual  conversion analogico digital
Mapa conceptual conversion analogico digital
 
2.medios de transmision
2.medios de transmision2.medios de transmision
2.medios de transmision
 
Cuadro comparativo de modulaciones
Cuadro comparativo de modulacionesCuadro comparativo de modulaciones
Cuadro comparativo de modulaciones
 
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicos
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicosFundamentos de Telecomunicaciones - Unidad 1 conceptos basicos
Fundamentos de Telecomunicaciones - Unidad 1 conceptos basicos
 
Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1Principios electricos y aplicaciones digitalesl sesion 1
Principios electricos y aplicaciones digitalesl sesion 1
 
Conversion analogico digital: muestreo, cuantizacion y codificacion
Conversion analogico digital: muestreo, cuantizacion y codificacionConversion analogico digital: muestreo, cuantizacion y codificacion
Conversion analogico digital: muestreo, cuantizacion y codificacion
 
Procesamiento digital de señales con matlab
Procesamiento digital de señales con matlabProcesamiento digital de señales con matlab
Procesamiento digital de señales con matlab
 

Similar a Programación concurrente multihilos

Unidad 4 isc j3 programacion concurrente CB
Unidad 4 isc j3 programacion concurrente CBUnidad 4 isc j3 programacion concurrente CB
Unidad 4 isc j3 programacion concurrente CBJhonatan Pat
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXIvan Luis Jimenez
 
Programando en java
Programando en javaProgramando en java
Programando en javajulianbm60
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2Irving Che
 
Informetecnicou2 topicos
Informetecnicou2 topicosInformetecnicou2 topicos
Informetecnicou2 topicosKanddy Mobylml
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosmellcv
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupSoraya Lara
 
Progra final examen
Progra final examen Progra final examen
Progra final examen JuanSimbaa8
 
Herencia encapsulación polimorfismo
Herencia encapsulación polimorfismoHerencia encapsulación polimorfismo
Herencia encapsulación polimorfismoFernando Solis
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Soraya Lara
 
Metodos,variables, pasodeparametros
Metodos,variables, pasodeparametrosMetodos,variables, pasodeparametros
Metodos,variables, pasodeparametroskenixxx
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisorSoraya Lara
 

Similar a Programación concurrente multihilos (20)

Unidad 4 isc j3 programacion concurrente CB
Unidad 4 isc j3 programacion concurrente CBUnidad 4 isc j3 programacion concurrente CB
Unidad 4 isc j3 programacion concurrente CB
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
procesos
procesosprocesos
procesos
 
Guia4 java
Guia4 javaGuia4 java
Guia4 java
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Chap 15bpin
Chap 15bpinChap 15bpin
Chap 15bpin
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2
 
Informetecnicou2 topicos
Informetecnicou2 topicosInformetecnicou2 topicos
Informetecnicou2 topicos
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Compilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y CupCompilador divisor de cantidades con Jflex y Cup
Compilador divisor de cantidades con Jflex y Cup
 
Progra final examen
Progra final examen Progra final examen
Progra final examen
 
Examen
Examen Examen
Examen
 
Herencia encapsulación polimorfismo
Herencia encapsulación polimorfismoHerencia encapsulación polimorfismo
Herencia encapsulación polimorfismo
 
Compilador (divisor de cantidades )
Compilador (divisor de cantidades )Compilador (divisor de cantidades )
Compilador (divisor de cantidades )
 
Lab3-POO
Lab3-POOLab3-POO
Lab3-POO
 
Metodos,variables, pasodeparametros
Metodos,variables, pasodeparametrosMetodos,variables, pasodeparametros
Metodos,variables, pasodeparametros
 
Practica 1 html_basico
Practica 1 html_basicoPractica 1 html_basico
Practica 1 html_basico
 
Informe compilador divisor
Informe compilador divisorInforme compilador divisor
Informe compilador divisor
 

Último

ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdfCurso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdfcesar17lavictoria
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxEverardoRuiz8
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxYajairaMartinez30
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdfAnthonyTiclia
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 

Último (20)

ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdfCurso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptx
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptx
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 

Programación concurrente multihilos

  • 1. 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
  • 2. 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:
  • 3. 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(); } } } }
  • 4. 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
  • 5. 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
  • 6. 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) clsJugador1 jug1 = new clsJugador1(); clsJugador2 jug2 = new clsJugador2(); clsJugador3 jug3 = new clsJugador3(); public FormaHilos() { initComponents(); //Creamos los componentas Tipo Etiqueta JLabel Nombre1=lblNombreJug1,Nombre2=lblNombreJug2,Nombre3=lblNombreJug3; cargarTabla(); //Creamos las etiquetas y le damos formato de fuente y tamaño Nombre1.setText("Jugador : "+jug1.getNombre().toUpperCase()); Nombre1.setFont(new java.awt.Font("Comic Sans MS", 0, 14)); Nombre2.setText("Jugador "+jug2.getNombre().toUpperCase()); Nombre2.setFont(new java.awt.Font("Comic Sans MS", 0, 14)); Nombre3.setText("Jugador : "+jug3.getNombre().toUpperCase()); Nombre3.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
  • 7. } void cargarDetalle() { for (int i=0;i<24;i++){ filas[i]=0; } for(int x=1;x<=3;x++){ int numero = (int) (Math.random()*22+1); //para generar los numeros. filas[numero]= -1; } modeloTabla.addRow(filas); //carga el modelo con los datos obtenidos Tabla.setModel(modeloTabla); //carga el modelo en JTab //tabEmpleados } private void cargarTabla(){ for (int i=1;i<=24;i++){ modeloTabla.addColumn(String.valueOf(i)); } cargarDetalle(); } public void limpiarTabla(javax.swing.JTable miTabla) { DefaultTableModel modelo = (DefaultTableModel) miTabla.getModel(); while(modelo.getRowCount()>0) modelo.removeRow(0); celdaJugador1=0; celdaJugador2=0; celdaJugador3=0; seguir = true; } void confTablaJugadores(javax.swing.table.DefaultTableModel Modelo) { Modelo.addColumn("Celda Avance"); Modelo.addColumn("Contenido de la Celda"); Modelo.addColumn("Celda Actual"); } public void moverJugador1(int celda) { try{ celdaJugador1+=celda; if (celdaJugador1 >= 24 && seguir == true ) { celdaJugador1=24; seguir = false; JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador No."+String.valueOf(jug1.getNumero()) +", " + jug1.getNombre().toUpperCase()); } //aqui gana el jugador... if (celdaJugador1 <= 24) { Object valorCelda = Tabla.getValueAt(0,celdaJugador1); if ( "-1".equals(valorCelda.toString())) celdaJugador1 = 0; if (p == 0) {confTablaJugadores(this.modTablaJugador1);p=1;}
  • 8. datosJugador1[0]=String.valueOf(celda); datosJugador1[1]=valorCelda; datosJugador1[2]=celdaJugador1; modTablaJugador1.addRow(datosJugador1); tablaJugador1.setModel(modTablaJugador1); JLabel Jugad1=lblJugador1; Jugad1.setText("Interacciones: "+String.valueOf(modTablaJugador1.getRowCount())); Jugad1.setFont(new java.awt.Font("Comic Sans MS", 0, 14)); } } catch (Exception ex){ System.out.printf(ex.getMessage()); seguir = false; } } public void moverJugador2(int celda) { try{ celdaJugador2+=celda; if (celdaJugador2 >= 24 && seguir == true ) { celdaJugador2=24; seguir = false; JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador No."+String.valueOf(jug2.getNumero()) + ", " + jug2.getNombre().toUpperCase()); } //aqui gana el jugador... if (celdaJugador2 <= 24) { Object valorCelda = Tabla.getValueAt(0,celdaJugador2); if ( "-1".equals(valorCelda.toString())) celdaJugador2 = 0; if (q == 0) { confTablaJugadores(this.modTablaJugador2);q=1;} datosJugador2[0]=String.valueOf(celda); datosJugador2[1]=valorCelda; datosJugador2[2]=celdaJugador2; modTablaJugador2.addRow(datosJugador2); tablaJugador2.setModel(modTablaJugador2); JLabel Jugad2=lblJugador2; Jugad2.setText("Interacciones: "+String.valueOf(modTablaJugador2.getRowCount())); Jugad2.setFont(new java.awt.Font("Comic Sans MS", 0, 14)); } } catch (Exception ex){ System.out.printf(ex.getMessage()); seguir = false; } } public void moverJugador3(int celda) { try{ celdaJugador3+=celda; if (celdaJugador3 >= 24 && seguir == true ) {
  • 9. celdaJugador3=24; seguir = false; JOptionPane.showMessageDialog(null, "Juego Terminado...Ganó el Jugador No."+String.valueOf(jug3.getNumero()) + ", " + jug3.getNombre().toUpperCase()); } //aqui gana el jugador if (celdaJugador3 <= 24) { Object valorCelda = Tabla.getValueAt(0,celdaJugador3); if ( "-1".equals(valorCelda.toString())) celdaJugador3 = 0; if (m == 0) {confTablaJugadores(this.modTablaJugador3);m=1;} datosJugador3[0]=String.valueOf(celda); datosJugador3[1]=valorCelda; datosJugador3[2]=celdaJugador3; modTablaJugador3.addRow(datosJugador3); tablaJugador3.setModel(modTablaJugador3); JLabel Jugad3=lblJugador3; Jugad3.setText("Interacciones: "+String.valueOf(modTablaJugador3.getRowCount())); Jugad3.setFont(new java.awt.Font("Comic Sans MS", 0, 14)); } } catch (Exception ex) { System.out.printf(ex.getMessage()); seguir = false; } } Código botón btnReiniciarJuego private void btnReiniciarJuegoActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: limpiarTabla(this.tablaJugador1); limpiarTabla(this.tablaJugador2); limpiarTabla(this.tablaJugador3); btnJugar.setEnabled(true); btnReiniciarJuego.setEnabled(false); lblJugador1.setText("Interacciones: 0"); lblJugador2.setText("Interacciones: 0"); lblJugador3.setText("Interacciones: 0"); }
  • 10. Código botón btnGenerarTabla private void btnGenerarTablaActionPerformed(java.awt.event.ActionEvent evt){ // TODO add your handling code here: modeloTabla.removeRow(0); Tabla.setModel(modeloTabla); cargarDetalle(); } Código botón btnJugar private void btnJugarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: clsJugador1 j1; j1 = new clsJugador1(this); clsJugador2 j2; j2 = new Logica.clsJugador2(this); clsJugador3 j3; j3 = new Logica.clsJugador3(this); j1.start(); j2.start(); j3.start(); if (seguir == false) { j1 = null; j2 = null; j3 = null; } btnJugar.setEnabled(false); btnReiniciarJuego.setEnabled(true); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new FormaHilos().setVisible(true); } //Fin Run }); } //Fin Main
  • 11. CONCLUSIÓN BALAM YAM WILBERTH: En esta cuarta unidad abarcamos el tema de la programación en hilos o programación concurrente, que nos ayuda a que nuestro software realice varias tareas “Simultáneamente”. Y eso nos puede resolver varios problemas en el desarrollo de software. POOT TUZ EFRAIN ANTONIO En la unidad cuatro vimos lo que son los hilos los hilos en java son básicamente en forma para poder ejecutar varios procesos simultáneamente en nuestros programas en java para poder ver o crear los hilos tenemos que crear una clase Thread o reescribir el método principal “rum()”” el cual se va a ejecutar principalmente al inicial un hilo, Thread o un nuevo proceso en java. AYALA MUTUL EZER ABISAI En la unidad cuatro se desarrolló una aplicación de escritorio, donde se aplicó el funcionamiento de packages que vimos en la unidad anterior, igual vimos cómo aplicar como aplicar el funcionamiento de hilos esto nos ayudara al manejo de varias tareas simultaneas. AKE PECH JORGE MANUEL Aprendimos a hacer programación en hilos en la cual son procesos independientes en la cual se está ejecutando programas. Y eso nos ayuda mucho en el momento de desarrollar un software. CHABLE PAT JHONNY GABRIEL En esta unidad realizamos algunas prácticas con los multihilos y aprendimos que los hilos son un conjunto de acciones independientes que se activan durante la ejecución de un programa. Que son útiles cuando se necesitan realizar varias acciones a la vez de manera organizada sin afectar otras funciones en un programa. Lo mejor que hemos aprendido en esta unidad es saber implementar los hilos en nuestros programas, para realizar diferentes acciones determinadas. Y para finalizar, aprendimos a utilizar el código que se utiliza. VEGA SEGURA ADRIÁN ASÍS En esta unidad vimos lo que la programación concurrente y su utilidad en el software. Podemos decir que un programa multi hilo contiene dos o más partes que pueden ejecutarse de forma concurrente. El programa contiene hilos que viene siendo como caminos con su propio código. Se puede ejecutar paras hilos a la vez
  • 12. pero es muy diferente a los procesos porque los procesos son independientes y los hilos forman parte de un solo programa.