informe tecnico unidad 4

23
1 Instituto Tecnológico Superior de Felipe Carrillo Puerto Informe Técnico de la unidad 4 Ingeniería en sistemas computacionales Tópicos Avanzados de programación Unidad 4. Programación concurrente. Realizado por Ángel Felipe Suaste Tuz Carla Balam Méndez Bella Areli Perez Gomez Miriam Candelaria Poot Pech Irving Saul Che Canul Luis Antonio Chan Chuc

Upload: irving-che

Post on 02-Jul-2015

295 views

Category:

Technology


1 download

DESCRIPTION

informe

TRANSCRIPT

Page 1: Informe tecnico unidad 4

1

Instituto Tecnológico Superior

de Felipe Carrillo Puerto

Informe Técnico de la unidad 4

Ingeniería en sistemas computacionales

Tópicos Avanzados de programación

Unidad 4. Programación concurrente.

Realizado por

Ángel Felipe Suaste Tuz

Carla Balam Méndez

Bella Areli Perez Gomez

Miriam Candelaria Poot Pech

Irving Saul Che Canul

Luis Antonio Chan Chuc

Page 2: Informe tecnico unidad 4

2

Proyecto multihilos llamado AppHilos

Código de la FormaHilos

Código clase Jugador 1

Código clase Jugador 2

Código clase Jugador 3

Conclusiones

Conclusión Angel Felipe Suaste Tuz

Conclusión Carla Balam Méndez

Conclusión Bella Areli Perez Gomez

Conclusión Miriam Candelaria Poot Pech

Conclusión Irving Saul Che Canul

Conclusión Luis Antonio Chan Chuc

Conclusión general

Conclusión general

Page 3: Informe tecnico unidad 4

3

Proyecto multihilos llamado AppHilos

Código de la FormaHilos

package Fisica; //paquete de la clase

import Logica.clsJugador1; //importamos la clase del jugador 1

import Logica.clsJugador2; //importamos la clase del jugador 2

import Logica.clsJugador3; //importamos la clase del jugador 3

import javax.swing.JOptionPane; //importamos la clase JOptionaPane

import javax.swing.table.DefaultTableModel; //importamos la clase TableModel

public class FormaHilos extends javax.swing.JFrame { //inicia la clase FormaHilos, subclase de

JFrame

javax.swing.table.DefaultTableModel modeloTabla = new

javax.swing.table.DefaultTableModel(); //creamos un objeto de TableModel

javax.swing.table.DefaultTableModel modTablaP1= new

javax.swing.table.DefaultTableModel(); //creamos una tabla para el jugador 1, de tipo

TableModel

javax.swing.table.DefaultTableModel modTablaP2= new

javax.swing.table.DefaultTableModel(); //creamos una tabla para el jugador 2, de tipo

TableModel

javax.swing.table.DefaultTableModel modTablaP3= new

javax.swing.table.DefaultTableModel(); //creamos una tabla para el jugador 3, de tipo

TableModel

Object[]filas = new Object[24]; //creamos un arreglo de tipo Object, que tiene un tamaño de

24, que es la tabla que se ve al inicio del programa.

Object [] datosJugador1 = new Object[3]; //creamos un arreglo de tipo Object, que tiene un

tamaño de 3, para el jugador 1

Object [] datosJugador2 = new Object[3]; //creamos un arreglo de tipo Object, que tiene un

tamaño de 3, para el jugador 2

Object [] datosJugador3 = new Object[3]; //creamos un arreglo de tipo Object, que tiene un

tamaño de 3, para el jugador 3

public Boolean seguir = true; //varible tipo boolean

Page 4: Informe tecnico unidad 4

4

//variables tipo entero que iniciamos con ceros, para cada jugador

int celdaJugador1=0;

int celdaJugador2=0;

int celdaJugador3=0;

//variables tipo entero que iniciamos con ceros

int p=0;

int q=0;

int m=0;

//instanciamos tres objetos un objeto por cada clase, previamente importando

clsJugador1 jug1 = new clsJugador1();

clsJugador2 jug2 = new clsJugador2();

clsJugador3 jug3 = new clsJugador3();

public FormaHilos() { //inicio del constructor de la clase

//como vemos este constructor, va a servir que cuando se ejecute el proyecto cargue

//el metodo cargarTabla() y los tres labels.

initComponents();

cargarTabla();

jLabel1.setText("Jugador: " + jug1.getNombre().toUpperCase());

jLabel2.setText("Jugador: " + jug2.getNombre().toUpperCase());

jLabel3.setText("Jugador: " + jug3.getNombre().toUpperCase());

}//fin del constructor

void cargarDetalle(){ //inicio del método cargarDetalle

//el siguiente for agrega ceros a la tabla de 24 columnas.

for (int i = 0; i<24; i++){

filas [i]=0;

} //fin for1

//este otro for hace que de forma aleatoria la tabla de 24 columnas tenga un -1 segun el

numero aleatorio que caiga.

for (int x = 1; x<=3; x++){

int numero = (int ) (Math.random()*22+1);

filas[numero]=-1;

modeloTabla.addRow(filas);

tabla.setModel(modeloTabla);

Page 5: Informe tecnico unidad 4

5

}//fin for 2

} //fin del metodo cargarDetalle()

void cargarTabla(){ //inicio metodo cargarTabla()

for (int i = 1;i<=24;i++){

modeloTabla.addColumn(String.valueOf(i));

}

cargarDetalle(); //llamar metodo cargarDetalle()

}//fin del metodo cargarTabla()

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();

tabla = new javax.swing.JTable();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jScrollPane4 = new javax.swing.JScrollPane();

tablePlayer1 = new javax.swing.JTable();

jScrollPane6 = new javax.swing.JScrollPane();

tablePlayer3 = new javax.swing.JTable();

jScrollPane7 = new javax.swing.JScrollPane();

tablePlayer2 = new javax.swing.JTable();

btnRestart = new javax.swing.JButton();

btnGenerar = new javax.swing.JButton();

lblp2 = new javax.swing.JLabel();

lblp3 = new javax.swing.JLabel();

lblp1 = new javax.swing.JLabel();

btnPlay = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

tabla.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,

null, null, null, null, null, null},

{null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,

null, null, null, null, null, null}

},

Page 6: Informe tecnico unidad 4

6

new String [] {

"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",

"19", "20", "21", "22", "23", "24"

}

));

jScrollPane1.setViewportView(tabla);

//poniendole texto a los labels

jLabel1.setText("Jugador 1");

jLabel2.setText("Jugador 2");

jLabel3.setText("Jugador 3");

tablePlayer1.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null}

},

new String [] {

//texto de las columnas de la tabla del jugador 1

"Celda Avance", "Contenido Celda", "Celda Actual"

}

));

jScrollPane4.setViewportView(tablePlayer1);

tablePlayer3.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null}

},

new String [] {

//texto de las columnas de la tabla del jugador 2

"Celda Avance", "Contenido Celda", "Celda Actual"

}

));

jScrollPane6.setViewportView(tablePlayer3);

tablePlayer2.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null}

},

new String [] {

//texto de las columnas de la tabla del jugador 3

"Celda Avance", "Contenido Celda", "Celda Actual"

}

Page 7: Informe tecnico unidad 4

7

));

jScrollPane7.setViewportView(tablePlayer2);

btnRestart.setText("Restart Game"); //texto del boton

btnRestart.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnRestartActionPerformed(evt);

}

});

btnGenerar.setText("Generar"); //texto del boton

btnGenerar.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnGenerarActionPerformed(evt);

}

});

//texto de las etiquetas

lblp2.setText("Interracciones: 0");

lblp3.setText("Interracciones: 0");

lblp1.setText("Interracciones: 0");

btnPlay.setText("Play"); //texto del boton, despues de aqui todo el código es generado por

el editor

btnPlay.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnPlayActionPerformed(evt);

}

});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(110, 110, 110)

.addComponent(jLabel1)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,

javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jLabel2)

.addGap(244, 244, 244)

.addComponent(jLabel3)

Page 8: Informe tecnico unidad 4

8

.addGap(138, 138, 138))

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE,

344, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(lblp2)

.addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE,

344, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(btnPlay)

.addGap(62, 62, 62)

.addComponent(btnRestart)

.addGap(152, 152, 152)

.addComponent(btnGenerar))

.addComponent(lblp1))))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 344,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(lblp3))

.addContainerGap(245, Short.MAX_VALUE))

.addComponent(jScrollPane1)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 125,

Short.MAX_VALUE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel1)

Page 9: Informe tecnico unidad 4

9

.addComponent(jLabel3))

.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING))

.addGap(18, 18, 18)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 323,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 323,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 323,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(18, 18, 18)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(lblp1)

.addComponent(lblp2)

.addComponent(lblp3))

.addGap(29, 29, 29)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(btnRestart)

.addComponent(btnGenerar)

.addComponent(btnPlay))

.addContainerGap())

);

pack();

}// </editor-fold>

private void btnRestartActionPerformed(java.awt.event.ActionEvent evt) {

//este método deja en blanco las tablas de los jugadores al presionar el botón restart,

asimismo habilita el boton play y deshabilita este mismo botón después de que hace su

cometido

limpiarTabla(this.tablePlayer1);

limpiarTabla(this.tablePlayer2);

limpiarTabla(this.tablePlayer3);

btnPlay.setEnabled(true);

btnRestart.setEnabled(false);

lblp1.setText("Interacciones: 0");

lblp2.setText("Interacciones: 0");

lblp3.setText("Interacciones: 0");

Page 10: Informe tecnico unidad 4

10

}

private void btnPlayActionPerformed(java.awt.event.ActionEvent evt) {

//este es el metodo del boton play, como vemos se instancian tres objetos de las clases

jugador1, jugador2 y jugador3.

Seguidamente vemos como llamamos a los métodos start() para cada objeto.

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;

}

//aqui se deshabilita el boton de play despues de ejecutarse una vez

btnPlay.setEnabled(false);

//aqui se habilita el boton de Restar despues de ejecutarse el evento del boton Play

btnRestart.setEnabled(true);

}

private void btnGenerarActionPerformed(java.awt.event.ActionEvent evt) {

modeloTabla.removeRow(0);

tabla.setModel(modeloTabla);

cargarDetalle();

}

//con este metodo hacemos que las tablas se limpien

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;

Page 11: Informe tecnico unidad 4

11

seguir = true;

}

public void moverJugador1 (int celda) {

try{

//el siguiente if determina si el jugador 1, ha llegado a 24; en caso de ser verdadero,

hace que la celda del jugador1 sea igual a 24 y seguir se vuelve false, para que se deje de

ejecutar y ademas imprime que el jugador uno ha ganado

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());

}

//este otro if es en caso de que el jugador 1 aún no ha llegado a 24, como vemos este if tiene

if’s anidados

if (celdaJugador1<=24){

Object valorCelda = tabla.getValueAt(0,celdaJugador1);

//este if determina si el valor es -1 de la celda, de ser asi toma el valor de 0

if ("-1".equals(valorCelda.toString()))

celdaJugador1=0;

if (p==0) { confTablaJugadores(this.modTablaP1); p=1; }

datosJugador1[0]=String.valueOf(celda);

datosJugador1[1]=valorCelda;

datosJugador1[2]=celdaJugador1;

modTablaP1.addRow(datosJugador1);

tablePlayer1.setModel(modTablaP1);

lblp1.setText("interacciones: " + String.valueOf(modTablaP1.getRowCount()));

}

}catch (Exception ex){

seguir = false;

}

Page 12: Informe tecnico unidad 4

12

}

public void moverJugador2 (int celda){

try {

celdaJugador2+=celda;

//el siguiente if determina si el jugador 2, ha llegado a 24; en caso de ser verdadero, hace que

la celda del jugador2 sea igual a 24 y seguir se vuelve false, para que se deje de ejecutar y

ademas imprime que el jugador dos ha ganado

if (celdaJugador2>=24 && seguir ==true){

celdaJugador2=24;

seguir =false;

JOptionPane.showMessageDialog(null, "Juego Terminado... Ganó el juagador No. " +

String.valueOf(jug2.getNumero()) +

", " + jug2.getNombre().toUpperCase());

} ←//aqui gana el player 2

//este otro if es en caso de que el jugador 1 aún no ha llegado a 24, como vemos este if

tiene if’s anidados→

if (celdaJugador2<=24){

Object valorCelda = tabla.getValueAt(0, celdaJugador2);

//este if determina si el valor es -1 de la celda, de ser asi toma el valor de 0

if ("-1".equals(valorCelda.toString())) celdaJugador2=0;

if (q==0){

confTablaJugadores(this.modTablaP2);

q=1;

}

datosJugador2[0]=String.valueOf(celda);

datosJugador2[1]=valorCelda;

datosJugador2[2]=celdaJugador2;

modTablaP2.addRow(datosJugador2);

tablePlayer2.setModel(modTablaP2);

lblp2.setText("interacciones:" + String.valueOf(modTablaP2.getRowCount()));

}

}catch (Exception ex){

seguir = false;

}

}

Page 13: Informe tecnico unidad 4

13

public void moverJugador3 ( int celda){

try{

celdaJugador3+=celda;

//el siguiente if determina si el jugador 2, ha llegado a 24; en caso de ser verdadero, hace que

la celda del jugador2 sea igual a 24 y seguir se vuelve false, para que se deje de ejecutar y

ademas imprime que el jugador dos ha ganado

if(celdaJugador3>=24&& seguir ==true){

celdaJugador3=24;

seguir =false;

JOptionPane.showMessageDialog(null, "Juego Terminado... Ganó el juagador No. "

+ String.valueOf(jug3.getNumero()) +

", " + jug3.getNombre().toUpperCase());

}//gana jugador 3

//este otro if es en caso de que el jugador 3 aún no ha llegado a 24, como vemos este if

tiene if’s anidados→

if (celdaJugador3<=24){

Object valorCelda=tabla.getValueAt(0, celdaJugador3);

if ("-1".equals(valorCelda.toString())) celdaJugador3=0;

if (m==0){

confTablaJugadores(this.modTablaP3);

m=1;

}

datosJugador3[0]=String.valueOf(celda);

datosJugador3[1]=valorCelda;

datosJugador3[2]=celdaJugador3;

modTablaP3.addRow(datosJugador3);

tablePlayer3.setModel(modTablaP3);

lblp3.setText("Interacciones: " + String.valueOf(modTablaP3.getRowCount()));

}

} catch (Exception ex){

seguir = false;

}

}

void confTablaJugadores(javax.swing.table.DefaultTableModel Modelo){

Modelo.addColumn("Celda Avance");

Page 14: Informe tecnico unidad 4

14

Modelo.addColumn("Contenido celda");

Modelo.addColumn("Celda actual");

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

/* Set the Nimbus look and feel */

//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

*/

try {

for (javax.swing.UIManager.LookAndFeelInfo info :

javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(FormaHilos.class.getName()).log(java.util.logging.Level.SEV

ERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(FormaHilos.class.getName()).log(java.util.logging.Level.SEV

ERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(FormaHilos.class.getName()).log(java.util.logging.Level.SEV

ERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(FormaHilos.class.getName()).log(java.util.logging.Level.SEV

ERE, null, ex);

}

//</editor-fold>

/* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new FormaHilos().setVisible(true);

Page 15: Informe tecnico unidad 4

15

}

});

}

// Variables declaration - do not modify

private javax.swing.JButton btnGenerar;

private javax.swing.JButton btnPlay;

private javax.swing.JButton btnRestart;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane4;

private javax.swing.JScrollPane jScrollPane6;

private javax.swing.JScrollPane jScrollPane7;

private javax.swing.JLabel lblp1;

private javax.swing.JLabel lblp2;

private javax.swing.JLabel lblp3;

private javax.swing.JTable tabla;

private javax.swing.JTable tablePlayer1;

private javax.swing.JTable tablePlayer2;

private javax.swing.JTable tablePlayer3;

// End of variables declaration

}

Page 16: Informe tecnico unidad 4

16

Código clase Jugador 1

package Logica; //paquete de la clase

import javax.swing.JOptionPane; //se importa la clase JOptionPane

public class clsJugador1 extends Thread{ //inicia la clase que hereda de clase Thread

private int numero;

private String nombre; //sera el nombre del jugador

private boolean continuar=true; //variable tipo boolean

public clsJugador1(){ //constructor

//este constructor es el que lee el nombre del jugador 1

numero=1;

nombre= JOptionPane.showInputDialog("Digite el nombre del jugador1 ");

} //fin constructor

public int getNumero(){ //método que recibe y retorna número

return numero;

}

public String getNombre(){ //método que recibe y retorna el nombre introducido

return nombre;

}

public Fisica.FormaHilos formHilo; //creamos objeto tipo formHilos

public clsJugador1(Fisica.FormaHilos aThis){

formHilo = aThis;

}

public void detenerHilo (){ //método que detiene la ejecución de esta clase.

continuar=false;

}

public void run(){ //metodo run de Thread

while (continuar){ //aqui mientras continuar sea true se ejecuta:

try{ //esto es una excepción

int avance = (int)(Math.random()*4);

formHilo.moverJugador1(avance);

Page 17: Informe tecnico unidad 4

17

continuar = formHilo.seguir;

Thread.sleep(150);

}catch(InterruptedException ex){

}

}

}

}

Código clase Jugador 2

//el siguiente código es igual que la del jugador 1

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;

nombre= JOptionPane.showInputDialog("Digite el nombre del jugador2 ");

}

public int getNumero(){

return numero;

}

public String getNombre(){

return nombre;

}

public Fisica.FormaHilos formHilo;

public clsJugador2(Fisica.FormaHilos aThis){

formHilo = aThis;

Page 18: Informe tecnico unidad 4

18

}

public void detenerHilo (){

continuar=false;

}

//override

public void run(){

while (continuar){

try{

int avance = (int)(Math.random()*4);

formHilo.moverJugador2(avance);

continuar = formHilo.seguir;

Thread.sleep(150);

}catch(InterruptedException ex){

}

}

}

}

Page 19: Informe tecnico unidad 4

19

Código clase Jugador 3

//igual que la del jugador 1

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;

nombre= JOptionPane.showInputDialog("Digite el nombre del jugador 3");

}

public int getNumero(){

return numero;

}

public String getNombre(){

return nombre;

}

public Fisica.FormaHilos formHilo;

public clsJugador3(Fisica.FormaHilos aThis){

formHilo = aThis;

}

public void detenerHilo (){

continuar=false;

}

public void run(){

while (continuar){

try{

Page 20: Informe tecnico unidad 4

20

int avance = (int)(Math.random()*4);

formHilo.moverJugador3(avance);

continuar = formHilo.seguir;

Thread.sleep(150);

}catch(InterruptedException ex){

}

}

}

}

Page 21: Informe tecnico unidad 4

21

Conclusiones

Conclusión Angel Felipe Suaste Tuz

En el paquete Lógica se tienen tres clases, las cuales son las clases de los jugadores 1, 2 y 3,

en esas se lee nombres del jugador y su número.

En el otro paquete Física se tiene la clase que une a las otras 3 clases de jugadores, es en esta

clase llama FormaHilos que se programa el entorno de la aplicación y allí se codifica

prácticamente todo el juego.

Fue necesario utilizar varios métodos, para darle vida al proyecto entre los métodos utilizados

están los método start y sleep, propios de la clase Thread.

Conclusión Carla Balam Méndez

Este programa se trata de unos jugadores.el tema de esta unidad son los hilos.

utilizamos algunos métodos de hilos que son:

stop():Este método provoca que el hilo se detenga de manera inmediata.

suspend(): El método suspend() es distinto de stop(). suspend() toma el hilo y provoca que se

detenga su ejecución sin destruir el hilo de sistema subyacente, ni el estado del hilo

anteriormente en ejecución.

resume():El método resume() se utiliza para revivir un hilo suspendido.

como en otros programas manejamos e importamos paquetes, utilizamos constructores,

métodos y objetos. en la creación de las tablas manejamos componentes como botones,cajas

de texto, etc.

Conclusión Bella Areli Perez Gomez

Conclusión Miriam Candelaria Poot Pech

Conclusión Irving Saul Che Canul

Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio

de memoria.

La pequeña aplicación permite interactuar a dos jugadores unas serias secuencias

que se ejecutan para permitir interactuar las clases y métodos creados.

La creación de métodos y la utilización de los mismo son quienes le dan vida al juego

para poder interactuar con usuarios definidos por nombre y números de intensidad,

stop():ejecuta la orden para que el hilo se detenga en la posición donde ese encuentre

Page 22: Informe tecnico unidad 4

22

suspend():toma el hilo y provoca que se detenga su ejecución sin destruir el hilo, esto

significa que no afecta los demás procesos solo la instancia en donde se encuentre

resume():este método es usado para reiniciar o reactivar los procesos ya detenidos

start(): es usado para iniciar los procesos

sleep():se usa para pausar o inhabilitar el proceso y el usuario determina en que

momento activarlo de nuevo

Conclusión Luis Antonio Chan Chuc

En este programa de tres jugadores, utilizamos lo que son los hilos, estos son definidos

ya sea por programador o por el usuario un hilo es cada uno de los flujos secuenciales

de control en el programa. Para ello fue necesario utilizar los métodos Resume

(reactiva un hilo suspendido), Stop (detiene el hilo inmediatamente), Suspend

(suspende el hilo), se retoma otra vez la interfaz gráfica. Al igual se implementó

métodos tales como string, sleep, en fin el uso de los métodos es muy necesario.

Conclusión general

Page 23: Informe tecnico unidad 4

23

En esta unidad aprendimos a manejar hilos. los hilos son definidos por el usuario o por el

programador, son procesos a los que el programador define un comportamiento e inicia en un

momento específico. para la creación de este programa como en los programas anteriores se

importaron paquetes, utilizamos constructores y métodos para operaciones. el programa se

trato de unos jugadores.

Para la programación de hilos, se tienen métodos que son propio de los hilos, ejemplos de

métodos principales de un hilo (thread)son:

stop(): este método provoca que el hilo se detenga de manera inmediata.

suspend(): el método suspend() es distinto de stop(). suspend() toma el hilo y provoca que se

detenga su ejecución sin destruir el hilo de sistema subyacente, ni el estado del hilo

anteriormente en ejecución.

resume() :el método resume() se utiliza para revivir un hilo suspendido.

setPriority( int ): el método setPriority() asigna al hilo la prioridad indicada por el valor pasado

como parámetro.

getPriority(): este método devuelve la prioridad del hilo de ejecución en curso, que es un valor

comprendido entre uno y diez.

setName( String ): este método permite identificar al hilo con un nombre nemónico. De esta

manera se facilita la depuración de programas multihilo.

getName(): este método devuelve el valor actual, de tipo cadena, asignado como nombre al

hilo en ejecución mediante setName().

Cuando un programa java comienza su ejecución, ya hay un hilo ejecutándose, a este hilo se le

denomina normalmente hilo principal del programa, porque es el único que se ejecuta al

comenzar el programa. Este hilo principal es importante por dos razones:

• Es el hilo a partir del cual se crean el resto de los hilos del programa.

• Normalmente, debe ser el último que finaliza su ejecución, ya que cuando el hilo principal

finaliza, el programa termina.

Aunque el hilo principal se crea automáticamente cuando el programa comienza, se puede

controlar a través de un objeto Thread. Para ello se debe de obtener una referencia al mismo

llamando al método currentThread( ), que es un miembro public static de Thread. Su forma

general es la siguiente :

currentThread( ) es miembro de Thread que permite obtener el hilo actual.

Thread t = Thread.currentThread( );