Upload
irving-che
View
295
Download
1
Embed Size (px)
DESCRIPTION
informe
Citation preview
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
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
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
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);
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}
},
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"
}
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)
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)
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");
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;
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;
}
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;
}
}
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");
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);
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
}
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);
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;
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){
}
}
}
}
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{
20
int avance = (int)(Math.random()*4);
formHilo.moverJugador3(avance);
continuar = formHilo.seguir;
Thread.sleep(150);
}catch(InterruptedException ex){
}
}
}
}
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
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
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( );