SlideShare una empresa de Scribd logo
1 de 15
Multitarea e Hilos en Java con ejemplos 
(Thread & Runnable) 
Ejercicio # 1 
// Definimos unos sencillos hilos. Se detendrán un rato 
// antes de imprimir sus nombres y retardos 
class TestTh extends Thread { 
private String nombre; 
private int retardo; 
// Constructor para almacenar nuestro nombre 
// y el retardo 
public TestTh( String s,int d ) { 
nombre = s; 
retardo = d; 
} 
// El metodo run() es similar al main(), pero para 
// threads. Cuando run() termina el thread muere 
public void run() { 
// Retasamos la ejecución el tiempo especificado 
try { 
sleep( retardo ); 
} catch( InterruptedException e ) { 
; 
} 
// Ahora imprimimos el nombre 
System.out.println( "Hola Mundo! "+nombre+" "+retardo ); 
} 
} 
public class MultiHola { 
public static void main( String args[] ) { 
TestTh t1,t2,t3; 
// Creamos los threads 
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); 
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); 
t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); 
// Arrancamos los threads 
t1.start(); 
t2.start(); 
t3.start(); 
} 
}
Ejercicio # 2 
Arrancar y Parar Threads 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.Applet; 
public class NOMBRECLASE extends Applet implements Runnable { 
Thread t; 
int contador; 
// Creamos el thread y lo arrancamos 
public void init() { 
ProcesoRaton procesoRaton = new ProcesoRaton(); 
addMouseListener( procesoRaton ); 
contador = 0; 
t = new Thread( this ); 
t.start(); 
} 
// Corazón del applet, incrementa el contador, lo pinta en la 
// pantalla y tiene su tiempo de espera, tanto para incrementar 
// de nuevo el contador como para dejar tiempo a la CPU para que 
// atienda a otros applets o aplicaciones que pudiesen convivir 
public void run() { 
Thread miThread = Thread.currentThread(); 
while( t == miThread ) 
{ 
contador++; 
repaint(); 
// Forzosamente tenemos que capturar esta interrupción 
try { 
miThread.sleep( 10 ); 
} catch( InterruptedException e ) { 
; 
}; 
} 
} 
// Actualizamos un contador en la ventana del applet y otro en 
// la consola 
public void paint( Graphics g ) { 
g.drawString( Integer.toString( contador ),10,10 ); 
System.out.println( "Contador= "+contador ); 
} 
// Paramos el applet, pero sin llamar al método stop() 
public void stop() { 
t = null;
} 
// Cuando se pulsa el ratón dentro del dominio del applet 
// se detiene la ejecución 
// Esta es una Clase Anidada 
class ProcesoRaton extends MouseAdapter { 
public void mousePressed( MouseEvent evt ) { 
t.stop(); 
} 
} 
}
Ejercicio # 3 
package threadsJarroba; 
/** 
* 
* @author Richard 
*/ 
public class Cajera { 
private String nombre; 
public Cajera() { 
} 
public Cajera(String nombre) { 
this.nombre = nombre; 
} 
public String getNombre() { 
return nombre; 
} 
public void setNombre(String nombre) { 
this.nombre = nombre; 
} 
public void procesarCompra(Cliente cliente, long timeStamp) { 
System.out.println("La cajera " + this.nombre + 
" COMIENZA A PROCESAR LA COMPRA DEL CLIENTE " + 
cliente.getNombre() + 
" EN EL TIEMPO: " + (System.currentTimeMillis() - 
timeStamp) / 1000 + 
"seg"); 
for (int i = 0; i < cliente.getCarroCompra().length; i++) { 
this.esperarXsegundos(cliente.getCarroCompra()[i]); 
System.out.println("Procesado el producto " + (i + 1) + 
" ->Tiempo: " + (System.currentTimeMillis() - 
timeStamp) / 1000 + 
"seg"); 
} 
System.out.println("La cajera " + this.nombre + " HA TERMINADO DE 
PROCESAR " + 
cliente.getNombre() + " EN EL 
TIEMPO: " + 
(System.currentTimeMillis() - 
timeStamp) / 1000 + "seg"); 
}
private void esperarXsegundos(int segundos) { 
try { 
Thread.sleep(segundos * 1000); 
} catch (InterruptedException ex) { 
Thread.currentThread().interrupt(); 
} 
} 
}
Ejercicio # 4 
package threadsJarroba; 
/** 
* 
* @author Richard 
*/ 
public class CajeraThread extends Thread { 
private String nombre; 
private Cliente cliente; 
private long initialTime; 
public CajeraThread() { 
} 
public CajeraThread(String nombre, Cliente cliente, long initialTime) { 
this.nombre = nombre; 
this.cliente = cliente; 
this.initialTime = initialTime; 
} 
public String getNombre() { 
return nombre; 
} 
public void setNombre(String nombre) { 
this.nombre = nombre; 
} 
public long getInitialTime() { 
return initialTime; 
} 
public void setInitialTime(long initialTime) { 
this.initialTime = initialTime; 
} 
public Cliente getCliente() { 
return cliente; 
} 
public void setCliente(Cliente cliente) { 
this.cliente = cliente; 
} 
@Override 
public void run() { 
System.out.println("La cajera " + this.nombre + " COMIENZA A 
PROCESAR LA COMPRA DEL CLIENTE "
+ this.cliente.getNombre() + " EN EL TIEMPO: " 
+ (System.currentTimeMillis() - 
this.initialTime) / 1000 
+ "seg"); 
for (int i = 0; i < this.cliente.getCarroCompra().length; i++) { 
// Se procesa el pedido en X segundos 
this.esperarXsegundos(cliente.getCarroCompra()[i]); 
System.out.println("Procesado el producto " + (i + 1) 
+ " del cliente " + 
this.cliente.getNombre() + "->Tiempo: " 
+ (System.currentTimeMillis() - 
this.initialTime) / 1000 
+ "seg"); 
} 
System.out.println("La cajera " + this.nombre + " HA TERMINADO DE 
PROCESAR " 
+ this.cliente.getNombre() + " EN EL 
TIEMPO: " 
+ (System.currentTimeMillis() - 
this.initialTime) / 1000 
+ "seg"); 
} 
private void esperarXsegundos(int segundos) { 
try { 
Thread.sleep(segundos * 1000); 
} catch (InterruptedException ex) { 
Thread.currentThread().interrupt(); 
} 
} 
}
Ejercicio # 4 
package threadsJarroba; 
/** 
* 
* @author Richard 
*/ 
public class Cliente { 
private String nombre; 
private int[] carroCompra; 
public Cliente() { 
} 
public Cliente(String nombre, int[] carroCompra) { 
this.nombre = nombre; 
this.carroCompra = carroCompra; 
} 
public String getNombre() { 
return nombre; 
} 
public void setNombre(String nombre) { 
this.nombre = nombre; 
} 
public int[] getCarroCompra() { 
return carroCompra; 
} 
public void setCarroCompra(int[] carroCompra) { 
this.carroCompra = carroCompra; 
} 
}
Ejercicio # 5 
package threadsJarroba; 
/** 
* 
* @author Richard 
*/ 
public class Main { 
public static void main(String[] args) { 
Cliente cliente1 = new Cliente("Cliente 1", new int[] { 2, 2, 1, 5, 
2, 3 }); 
Cliente cliente2 = new Cliente("Cliente 2", new int[] { 1, 3, 5, 1, 
1 }); 
Cajera cajera1 = new Cajera("Cajera 1"); 
Cajera cajera2 = new Cajera("Cajera 2"); 
// Tiempo inicial de referencia 
long initialTime = System.currentTimeMillis(); 
cajera1.procesarCompra(cliente1, initialTime); 
cajera2.procesarCompra(cliente2, initialTime); 
} 
}
Ejercion # 6 
Este es un ejemplo de un applet, crea un hilo de animación que nos presenta 
el globo terráqueo en rotación. Aquí se puede ver que el applet crea un hilo de 
ejecución de sí mismo (concurrencia). Además, animacion.start() llama 
al start() del hilo, no del applet, que automáticamente llamará a run(): 
import java.awt.*; 
import java.applet.Applet; 
public class NOMBRECLASE extends Applet implements Runnable { 
Image imagenes[]; 
MediaTracker tracker; 
int indice = 0; 
Thread animacion; 
int maxAncho,maxAlto; 
Image offScrImage; // Componente off-screen para doble buffering 
Graphics offScrGC; 
// Nos indicará si ya se puede pintar 
boolean cargado = false; 
// Inicializamos el applet, establecemos su tamaño y 
// cargamos las imágenes 
public void init() { 
// Establecemos el supervisor de imágenes 
tracker = new MediaTracker( this ); 
// Fijamos el tamaño del applet 
maxAncho = 100; 
maxAlto = 100; 
imagenes = new Image[18]; 
// Establecemos el doble buffer y dimensionamos el applet 
try { 
offScrImage = createImage( maxAncho,maxAlto ); 
offScrGC = offScrImage.getGraphics(); 
offScrGC.setColor( Color.lightGray ); 
offScrGC.fillRect( 0,0,maxAncho,maxAlto ); 
resize( maxAncho,maxAlto ); 
} catch( Exception e ) { 
e.printStackTrace(); 
} 
// Cargamos las imágenes en un array 
for( int i=0; i < 18; i++ ) 
{ 
String fichero = 
new String( "tierra"+String.valueOf(i+1)+".gif" ); 
imagenes[i] = getImage( getDocumentBase(),fichero ); 
// Registramos las imágenes con el tracker 
tracker.addImage( imagenes[i],i ); 
showStatus( "Cargando Imagen: "+fichero );
} 
showStatus( "" ); 
try { 
// Utilizamos el tracker para comprobar que todas las 
// imágenes están cargadas 
tracker.waitForAll(); 
} catch( InterruptedException e ) { 
; 
} 
cargado = true; 
} 
// Pintamos el fotograma que corresponda 
public void paint( Graphics g ) { 
if( cargado ) 
g.drawImage( offScrImage,0,0,this ); 
} 
// Arrancamos y establecemos la primera imagen 
public void start() { 
if( tracker.checkID( indice ) ) 
offScrGC.drawImage( imagenes[indice],0,0,this ); 
animacion = new Thread( this ); 
animacion.start(); 
} 
// Aquí hacemos el trabajo de animación 
// Muestra una imagen, para, muestra la siguiente... 
public void run() { 
// Obtiene el identificador del thread 
Thread thActual = Thread.currentThread(); 
// Nos aseguramos de que se ejecuta cuando estamos en un thread 
// y además es el actual 
while( animacion != null && animacion == thActual ) 
{ 
if( tracker.checkID( indice ) ) 
{ 
// Obtenemos la siguiente imagen 
offScrGC.drawImage( imagenes[indice],0,0,this ); 
indice++; 
// Volvemos al principio y seguimos, para el bucle 
if( indice >= imagenes.length ) 
indice = 0; 
} 
// Ralentizamos la animación para que parezca normal 
try { 
animacion.sleep( 200 ); 
} catch( InterruptedException e ) { 
; 
} 
// Pintamos el siguiente fotograma 
repaint(); 
} 
} 
}
Ejercicio # 7 
package aplicacionhilos; 
/** 
* 
* @author usuario 
*/ 
public class animal extends Thread { 
String nombre; 
int limite; 
public animal(String nombre, int limite){ 
this.nombre = nombre; 
this.limite = limite; 
} 
@Override 
public void run(){ 
for (int n=0; n<limite;n++) { 
System.out.println(nombre+" avanza"); 
} 
System.out.println(nombre+" ha llegado a la meta"); 
yield(); 
} 
}
package aplicacionhilos; 
/** 
* 
* @author usuario 
*/ 
public class Aplicacionhilos { 
/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
animal conejo= new animal("conejo", 100); 
animal tortuga= new animal("tortuga", 100); 
animal perro=new animal("perro", 100); 
conejo.start(); 
tortuga.start(); 
perro.start(); 
//System.out.println("La carrera ha terminado"); 
} 
}
Ejercicio # 8 
/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package aplicacionhilos; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
/** 
* 
* @author usuario 
*/ 
public class animal extends Thread { 
String nombre; 
int limite; 
JLabel Etiqueta; 
public animal(String nombre, int limite, JLabel Etiqueta){ 
this.nombre = nombre; 
this.limite = limite; 
this.Etiqueta= Etiqueta; 
} 
@Override 
public void run(){ 
for (int n=0; n<limite;n++) { 
try { 
System.out.println(nombre+" avanza"); 
Etiqueta.setLocation(n,0); 
Thread.sleep(20); 
} catch (InterruptedException ex) { 
Logger.getLogger(animal.class.getName()).log(Level.SEVERE, null, ex); 
} 
} 
//System.out.println(nombre+" ha llegado a la meta"); 
JOptionPane.showMessageDialog(null, nombre +" Ha llegado a la meta"); 
System.out.println(nombre +" Ha llegado a la meta"); 
yield();
} 
}

Más contenido relacionado

La actualidad más candente

Ejercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrEjercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrcesartg65
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansEmerson Garay
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estadosstill01
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoRobertho Mathias
 
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!GonzaloFarinango1
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gioRobert Wolf
 
Diagramas clases presentacion
Diagramas clases presentacionDiagramas clases presentacion
Diagramas clases presentacionjosebrandon24
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosMario Villaseñor
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 

La actualidad más candente (20)

Ejercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidrEjercicio de subneteo vlsm y cidr
Ejercicio de subneteo vlsm y cidr
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeans
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
 
Proyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupoProyecto tres en_raya_f_inal_mathias_y_grupo
Proyecto tres en_raya_f_inal_mathias_y_grupo
 
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!
Guía de instalación de Eclipse y Desarrollo del programa ¡Hola Mundo!
 
Clases Genéricas en Java
Clases Genéricas en JavaClases Genéricas en Java
Clases Genéricas en Java
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Diagramas clases presentacion
Diagramas clases presentacionDiagramas clases presentacion
Diagramas clases presentacion
 
Ejercicios sql (1)
Ejercicios sql (1)Ejercicios sql (1)
Ejercicios sql (1)
 
Uml clase 04_uml_clases
Uml clase 04_uml_clasesUml clase 04_uml_clases
Uml clase 04_uml_clases
 
Ejercicio ADA Tipos de Datos en ADA
Ejercicio ADA Tipos de Datos en ADAEjercicio ADA Tipos de Datos en ADA
Ejercicio ADA Tipos de Datos en ADA
 
Transacciones en SQL SERVER
Transacciones en SQL SERVERTransacciones en SQL SERVER
Transacciones en SQL SERVER
 
Programación 1: modularización
Programación 1: modularizaciónProgramación 1: modularización
Programación 1: modularización
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a Objetos
 
Introducción a VueJS
Introducción a VueJSIntroducción a VueJS
Introducción a VueJS
 
Routing
RoutingRouting
Routing
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
Arquitectura de sistemas distribuidos
Arquitectura de sistemas distribuidosArquitectura de sistemas distribuidos
Arquitectura de sistemas distribuidos
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 

Destacado (20)

Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Concurrencia en Java
Concurrencia en JavaConcurrencia en Java
Concurrencia en Java
 
Tratamiento de caracteres en java
Tratamiento de caracteres en javaTratamiento de caracteres en java
Tratamiento de caracteres en java
 
Practica#1 - Semáforo
Practica#1 -  Semáforo Practica#1 -  Semáforo
Practica#1 - Semáforo
 
Pseudocodigo con ejemplos
Pseudocodigo con ejemplosPseudocodigo con ejemplos
Pseudocodigo con ejemplos
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Java
 
Requerimientos de instalacion
Requerimientos de instalacionRequerimientos de instalacion
Requerimientos de instalacion
 
Desarrollo Sostenible
Desarrollo SostenibleDesarrollo Sostenible
Desarrollo Sostenible
 
Ejercicios resueltos de java
Ejercicios resueltos de javaEjercicios resueltos de java
Ejercicios resueltos de java
 
Registrarse Slideshare
Registrarse SlideshareRegistrarse Slideshare
Registrarse Slideshare
 
Algoritmo de un cajero
Algoritmo de un cajeroAlgoritmo de un cajero
Algoritmo de un cajero
 
Computcion senati
Computcion senatiComputcion senati
Computcion senati
 
52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigo52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigo
 
Registrarse En Slideshare
Registrarse En SlideshareRegistrarse En Slideshare
Registrarse En Slideshare
 
Modulo Estadística 2011
Modulo Estadística 2011Modulo Estadística 2011
Modulo Estadística 2011
 
Desarrollo Sostenible
Desarrollo SostenibleDesarrollo Sostenible
Desarrollo Sostenible
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Crear Una Cuenta En Slideshare
Crear Una Cuenta En SlideshareCrear Una Cuenta En Slideshare
Crear Una Cuenta En Slideshare
 

Similar a Multitarea e hilos en java con ejemplos

Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++ Ronal Palomino
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosAntares Zehcnas
 
Presentación arraysobjetos
Presentación arraysobjetosPresentación arraysobjetos
Presentación arraysobjetossilsilvetti
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCIvan Luis Jimenez
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
Programando en java
Programando en javaProgramando en java
Programando en javajulianbm60
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeansedgar muñoz
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01cursobeta
 
Ejercicios
EjerciciosEjercicios
EjerciciosEzmee XD
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2climancc
 

Similar a Multitarea e hilos en java con ejemplos (20)

Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Java básico
Java  básicoJava  básico
Java básico
 
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
 
Intro PyGame Capitulo 5
Intro PyGame Capitulo 5Intro PyGame Capitulo 5
Intro PyGame Capitulo 5
 
Presentación arraysobjetos
Presentación arraysobjetosPresentación arraysobjetos
Presentación arraysobjetos
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Tarea Repetible
Tarea RepetibleTarea Repetible
Tarea Repetible
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Chap 15cpin
Chap 15cpinChap 15cpin
Chap 15cpin
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Sockets
SocketsSockets
Sockets
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 
Chap 15bpin
Chap 15bpinChap 15bpin
Chap 15bpin
 

Más de Carlos Anibal Riascos Hurtado

Primer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicadosPrimer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicadosCarlos Anibal Riascos Hurtado
 

Más de Carlos Anibal Riascos Hurtado (20)

introducción ingeniería de software
introducción  ingeniería de  softwareintroducción  ingeniería de  software
introducción ingeniería de software
 
Lluvia de ideas
Lluvia  de ideasLluvia  de ideas
Lluvia de ideas
 
Prototipo en papel
Prototipo en papelPrototipo en papel
Prototipo en papel
 
Explorar para investigar primera sesion
Explorar para investigar primera sesionExplorar para investigar primera sesion
Explorar para investigar primera sesion
 
Sistemas de informacion gerencial
Sistemas de informacion gerencialSistemas de informacion gerencial
Sistemas de informacion gerencial
 
Ingeniería de requisitos
Ingeniería de requisitosIngeniería de requisitos
Ingeniería de requisitos
 
Cuerta sesion investigacion ciencia y tecnologia
Cuerta sesion investigacion ciencia y tecnologiaCuerta sesion investigacion ciencia y tecnologia
Cuerta sesion investigacion ciencia y tecnologia
 
Segunda sesion ciencia-investigacion-metodo
Segunda sesion ciencia-investigacion-metodoSegunda sesion ciencia-investigacion-metodo
Segunda sesion ciencia-investigacion-metodo
 
Conducta de entrada 2016
Conducta de entrada 2016Conducta de entrada 2016
Conducta de entrada 2016
 
Tecnologia e informatica 2016
Tecnologia e informatica   2016Tecnologia e informatica   2016
Tecnologia e informatica 2016
 
Librerias java
Librerias javaLibrerias java
Librerias java
 
Guia del trabajo con excepciones
Guia del trabajo con excepcionesGuia del trabajo con excepciones
Guia del trabajo con excepciones
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
Guia funciones estadisticas
Guia funciones estadisticasGuia funciones estadisticas
Guia funciones estadisticas
 
Proyecto final de semestre
Proyecto final de semestreProyecto final de semestre
Proyecto final de semestre
 
Menejo de eventos en java introduccion
Menejo de eventos en java introduccionMenejo de eventos en java introduccion
Menejo de eventos en java introduccion
 
Primer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicadosPrimer taller del segundo parcial sistemas aplicados
Primer taller del segundo parcial sistemas aplicados
 
Public class implmusiempres implements musica
Public class implmusiempres implements musicaPublic class implmusiempres implements musica
Public class implmusiempres implements musica
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
 

Último

Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfssuser50d1252
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxMaritza438836
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docxMagalyDacostaPea
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...DavidBautistaFlores1
 
los cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivoslos cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivosOrdinolaSernaquIrene
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2Eliseo Delgado
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI Tarea 4_ Foro _Incorporar habilidades de Siglo XXI
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI Manuel Molina
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajeKattyMoran3
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...MagalyDacostaPea
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...GIANCARLOORDINOLAORD
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 

Último (20)

Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
 
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docxIII SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
III SEGUNDO CICLO PLAN DE TUTORÍA 2024.docx
 
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
4° UNIDAD 2 SALUD,ALIMENTACIÓN Y DÍA DE LA MADRE 933623393 PROF YESSENIA CN.docx
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...describimos como son afectados las regiones naturales del peru por la ola de ...
describimos como son afectados las regiones naturales del peru por la ola de ...
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
los cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivoslos cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivos
 
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
PÉNSUM ENFERMERIA 2024 - ECUGENIUS S.A. V2
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI Tarea 4_ Foro _Incorporar habilidades de Siglo XXI
Tarea 4_ Foro _Incorporar habilidades de Siglo XXI
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguaje
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADOFICHA  PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
FICHA PL PACO YUNQUE.docx PRIMARIA CUARTO GRADO
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
 
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
SESIÓN DE APRENDIZAJE Leemos un texto para identificar los sinónimos y los an...
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 

Multitarea e hilos en java con ejemplos

  • 1. Multitarea e Hilos en Java con ejemplos (Thread & Runnable) Ejercicio # 1 // Definimos unos sencillos hilos. Se detendrán un rato // antes de imprimir sus nombres y retardos class TestTh extends Thread { private String nombre; private int retardo; // Constructor para almacenar nuestro nombre // y el retardo public TestTh( String s,int d ) { nombre = s; retardo = d; } // El metodo run() es similar al main(), pero para // threads. Cuando run() termina el thread muere public void run() { // Retasamos la ejecución el tiempo especificado try { sleep( retardo ); } catch( InterruptedException e ) { ; } // Ahora imprimimos el nombre System.out.println( "Hola Mundo! "+nombre+" "+retardo ); } } public class MultiHola { public static void main( String args[] ) { TestTh t1,t2,t3; // Creamos los threads t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); // Arrancamos los threads t1.start(); t2.start(); t3.start(); } }
  • 2. Ejercicio # 2 Arrancar y Parar Threads import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class NOMBRECLASE extends Applet implements Runnable { Thread t; int contador; // Creamos el thread y lo arrancamos public void init() { ProcesoRaton procesoRaton = new ProcesoRaton(); addMouseListener( procesoRaton ); contador = 0; t = new Thread( this ); t.start(); } // Corazón del applet, incrementa el contador, lo pinta en la // pantalla y tiene su tiempo de espera, tanto para incrementar // de nuevo el contador como para dejar tiempo a la CPU para que // atienda a otros applets o aplicaciones que pudiesen convivir public void run() { Thread miThread = Thread.currentThread(); while( t == miThread ) { contador++; repaint(); // Forzosamente tenemos que capturar esta interrupción try { miThread.sleep( 10 ); } catch( InterruptedException e ) { ; }; } } // Actualizamos un contador en la ventana del applet y otro en // la consola public void paint( Graphics g ) { g.drawString( Integer.toString( contador ),10,10 ); System.out.println( "Contador= "+contador ); } // Paramos el applet, pero sin llamar al método stop() public void stop() { t = null;
  • 3. } // Cuando se pulsa el ratón dentro del dominio del applet // se detiene la ejecución // Esta es una Clase Anidada class ProcesoRaton extends MouseAdapter { public void mousePressed( MouseEvent evt ) { t.stop(); } } }
  • 4. Ejercicio # 3 package threadsJarroba; /** * * @author Richard */ public class Cajera { private String nombre; public Cajera() { } public Cajera(String nombre) { this.nombre = nombre; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public void procesarCompra(Cliente cliente, long timeStamp) { System.out.println("La cajera " + this.nombre + " COMIENZA A PROCESAR LA COMPRA DEL CLIENTE " + cliente.getNombre() + " EN EL TIEMPO: " + (System.currentTimeMillis() - timeStamp) / 1000 + "seg"); for (int i = 0; i < cliente.getCarroCompra().length; i++) { this.esperarXsegundos(cliente.getCarroCompra()[i]); System.out.println("Procesado el producto " + (i + 1) + " ->Tiempo: " + (System.currentTimeMillis() - timeStamp) / 1000 + "seg"); } System.out.println("La cajera " + this.nombre + " HA TERMINADO DE PROCESAR " + cliente.getNombre() + " EN EL TIEMPO: " + (System.currentTimeMillis() - timeStamp) / 1000 + "seg"); }
  • 5. private void esperarXsegundos(int segundos) { try { Thread.sleep(segundos * 1000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } }
  • 6. Ejercicio # 4 package threadsJarroba; /** * * @author Richard */ public class CajeraThread extends Thread { private String nombre; private Cliente cliente; private long initialTime; public CajeraThread() { } public CajeraThread(String nombre, Cliente cliente, long initialTime) { this.nombre = nombre; this.cliente = cliente; this.initialTime = initialTime; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public long getInitialTime() { return initialTime; } public void setInitialTime(long initialTime) { this.initialTime = initialTime; } public Cliente getCliente() { return cliente; } public void setCliente(Cliente cliente) { this.cliente = cliente; } @Override public void run() { System.out.println("La cajera " + this.nombre + " COMIENZA A PROCESAR LA COMPRA DEL CLIENTE "
  • 7. + this.cliente.getNombre() + " EN EL TIEMPO: " + (System.currentTimeMillis() - this.initialTime) / 1000 + "seg"); for (int i = 0; i < this.cliente.getCarroCompra().length; i++) { // Se procesa el pedido en X segundos this.esperarXsegundos(cliente.getCarroCompra()[i]); System.out.println("Procesado el producto " + (i + 1) + " del cliente " + this.cliente.getNombre() + "->Tiempo: " + (System.currentTimeMillis() - this.initialTime) / 1000 + "seg"); } System.out.println("La cajera " + this.nombre + " HA TERMINADO DE PROCESAR " + this.cliente.getNombre() + " EN EL TIEMPO: " + (System.currentTimeMillis() - this.initialTime) / 1000 + "seg"); } private void esperarXsegundos(int segundos) { try { Thread.sleep(segundos * 1000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } }
  • 8. Ejercicio # 4 package threadsJarroba; /** * * @author Richard */ public class Cliente { private String nombre; private int[] carroCompra; public Cliente() { } public Cliente(String nombre, int[] carroCompra) { this.nombre = nombre; this.carroCompra = carroCompra; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public int[] getCarroCompra() { return carroCompra; } public void setCarroCompra(int[] carroCompra) { this.carroCompra = carroCompra; } }
  • 9. Ejercicio # 5 package threadsJarroba; /** * * @author Richard */ public class Main { public static void main(String[] args) { Cliente cliente1 = new Cliente("Cliente 1", new int[] { 2, 2, 1, 5, 2, 3 }); Cliente cliente2 = new Cliente("Cliente 2", new int[] { 1, 3, 5, 1, 1 }); Cajera cajera1 = new Cajera("Cajera 1"); Cajera cajera2 = new Cajera("Cajera 2"); // Tiempo inicial de referencia long initialTime = System.currentTimeMillis(); cajera1.procesarCompra(cliente1, initialTime); cajera2.procesarCompra(cliente2, initialTime); } }
  • 10. Ejercion # 6 Este es un ejemplo de un applet, crea un hilo de animación que nos presenta el globo terráqueo en rotación. Aquí se puede ver que el applet crea un hilo de ejecución de sí mismo (concurrencia). Además, animacion.start() llama al start() del hilo, no del applet, que automáticamente llamará a run(): import java.awt.*; import java.applet.Applet; public class NOMBRECLASE extends Applet implements Runnable { Image imagenes[]; MediaTracker tracker; int indice = 0; Thread animacion; int maxAncho,maxAlto; Image offScrImage; // Componente off-screen para doble buffering Graphics offScrGC; // Nos indicará si ya se puede pintar boolean cargado = false; // Inicializamos el applet, establecemos su tamaño y // cargamos las imágenes public void init() { // Establecemos el supervisor de imágenes tracker = new MediaTracker( this ); // Fijamos el tamaño del applet maxAncho = 100; maxAlto = 100; imagenes = new Image[18]; // Establecemos el doble buffer y dimensionamos el applet try { offScrImage = createImage( maxAncho,maxAlto ); offScrGC = offScrImage.getGraphics(); offScrGC.setColor( Color.lightGray ); offScrGC.fillRect( 0,0,maxAncho,maxAlto ); resize( maxAncho,maxAlto ); } catch( Exception e ) { e.printStackTrace(); } // Cargamos las imágenes en un array for( int i=0; i < 18; i++ ) { String fichero = new String( "tierra"+String.valueOf(i+1)+".gif" ); imagenes[i] = getImage( getDocumentBase(),fichero ); // Registramos las imágenes con el tracker tracker.addImage( imagenes[i],i ); showStatus( "Cargando Imagen: "+fichero );
  • 11. } showStatus( "" ); try { // Utilizamos el tracker para comprobar que todas las // imágenes están cargadas tracker.waitForAll(); } catch( InterruptedException e ) { ; } cargado = true; } // Pintamos el fotograma que corresponda public void paint( Graphics g ) { if( cargado ) g.drawImage( offScrImage,0,0,this ); } // Arrancamos y establecemos la primera imagen public void start() { if( tracker.checkID( indice ) ) offScrGC.drawImage( imagenes[indice],0,0,this ); animacion = new Thread( this ); animacion.start(); } // Aquí hacemos el trabajo de animación // Muestra una imagen, para, muestra la siguiente... public void run() { // Obtiene el identificador del thread Thread thActual = Thread.currentThread(); // Nos aseguramos de que se ejecuta cuando estamos en un thread // y además es el actual while( animacion != null && animacion == thActual ) { if( tracker.checkID( indice ) ) { // Obtenemos la siguiente imagen offScrGC.drawImage( imagenes[indice],0,0,this ); indice++; // Volvemos al principio y seguimos, para el bucle if( indice >= imagenes.length ) indice = 0; } // Ralentizamos la animación para que parezca normal try { animacion.sleep( 200 ); } catch( InterruptedException e ) { ; } // Pintamos el siguiente fotograma repaint(); } } }
  • 12. Ejercicio # 7 package aplicacionhilos; /** * * @author usuario */ public class animal extends Thread { String nombre; int limite; public animal(String nombre, int limite){ this.nombre = nombre; this.limite = limite; } @Override public void run(){ for (int n=0; n<limite;n++) { System.out.println(nombre+" avanza"); } System.out.println(nombre+" ha llegado a la meta"); yield(); } }
  • 13. package aplicacionhilos; /** * * @author usuario */ public class Aplicacionhilos { /** * @param args the command line arguments */ public static void main(String[] args) { animal conejo= new animal("conejo", 100); animal tortuga= new animal("tortuga", 100); animal perro=new animal("perro", 100); conejo.start(); tortuga.start(); perro.start(); //System.out.println("La carrera ha terminado"); } }
  • 14. Ejercicio # 8 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package aplicacionhilos; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JLabel; import javax.swing.JOptionPane; /** * * @author usuario */ public class animal extends Thread { String nombre; int limite; JLabel Etiqueta; public animal(String nombre, int limite, JLabel Etiqueta){ this.nombre = nombre; this.limite = limite; this.Etiqueta= Etiqueta; } @Override public void run(){ for (int n=0; n<limite;n++) { try { System.out.println(nombre+" avanza"); Etiqueta.setLocation(n,0); Thread.sleep(20); } catch (InterruptedException ex) { Logger.getLogger(animal.class.getName()).log(Level.SEVERE, null, ex); } } //System.out.println(nombre+" ha llegado a la meta"); JOptionPane.showMessageDialog(null, nombre +" Ha llegado a la meta"); System.out.println(nombre +" Ha llegado a la meta"); yield();
  • 15. } }