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

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Python 3
Python 3Python 3
Python 3
CHREAR
 
Java Thread Synchronization
Java Thread SynchronizationJava Thread Synchronization
Java Thread Synchronization
Benj Del Mundo
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
Irving Che
 

La actualidad más candente (20)

Programación 3: colecciones Java
Programación 3: colecciones JavaProgramación 3: colecciones Java
Programación 3: colecciones Java
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
Java operators
Java operatorsJava operators
Java operators
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Packages in java
Packages in javaPackages in java
Packages in java
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
PAQUETES EN JAVA
PAQUETES EN JAVAPAQUETES EN JAVA
PAQUETES EN JAVA
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
Python 3
Python 3Python 3
Python 3
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Tipos de excepciones
Tipos de excepcionesTipos de excepciones
Tipos de excepciones
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Servicios basicos de red
Servicios basicos de redServicios basicos de red
Servicios basicos de red
 
Java Thread Synchronization
Java Thread SynchronizationJava Thread Synchronization
Java Thread Synchronization
 
Javascript
JavascriptJavascript
Javascript
 
JavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UXJavaScript Basics and Best Practices - CC FE & UX
JavaScript Basics and Best Practices - CC FE & UX
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases7 Curso de POO en java - diagrama de clases
7 Curso de POO en java - diagrama de clases
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 

Destacado

Pseudocodigo con ejemplos
Pseudocodigo con ejemplosPseudocodigo con ejemplos
Pseudocodigo con ejemplos
isabel-fcsyp
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Java
quesada_diego
 
Requerimientos de instalacion
Requerimientos de instalacionRequerimientos de instalacion
Requerimientos de instalacion
josebunbury
 
Algoritmo de un cajero
Algoritmo de un cajeroAlgoritmo de un cajero
Algoritmo de un cajero
Carlos Potrero
 
Desarrollo Sostenible
Desarrollo SostenibleDesarrollo Sostenible
Desarrollo Sostenible
gperezm
 
Crear Una Cuenta En Slideshare
Crear Una Cuenta En SlideshareCrear Una Cuenta En Slideshare
Crear Una Cuenta En Slideshare
Luis Hernández
 

Destacado (19)

Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
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
 
Simulador de un semaforo
Simulador de un semaforoSimulador de un semaforo
Simulador de un semaforo
 

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 - Trovit
Jordi 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 procesos
Antares Zehcnas
 
Presentación arraysobjetos
Presentación arraysobjetosPresentación arraysobjetos
Presentación arraysobjetos
silsilvetti
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
Jordi Gerona
 
Programando en java
Programando en javaProgramando en java
Programando en java
julianbm60
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
edgar muñoz
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
cursobeta
 
Ejercicios
EjerciciosEjercicios
Ejercicios
Ezmee 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 A2
climancc
 

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
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Chap 15bpin
Chap 15bpinChap 15bpin
Chap 15bpin
 

Más de Carlos 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

2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
UPTAIDELTACHIRA
 

Último (20)

PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 

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. } }