Java

Páginas: 13 (3107 palabras) Publicado: 22 de mayo de 2015
Threads 
 
En  Java  para  utilizar  la  multitarea  debemos  de  usar   la  clase  ​
Thread  (es  decir que la  clase 
que  implementemos  debe  ​
heredar  de  la  clase  Thread)  y  la  clase  Thread  implementa 

la​
Interface  ​
Runnable​
.  En  el siguiente diagrama  de  clase  mostramos  la  Interface  Runnable y 
la clase Thread con sus principales métodos: 

 
¿Y  si  en  vez  de procesar  primero un cliente y después otro, procesásemos los dos a la vez?, 
¿Cuanto  tardaría  el  programa  en  ejecutarse?.  Pues  bien  si  en vez  de haber solo una Cajera 

(es  decir  un solo hilo), hubiese dos Cajeras (es decir dos hilos o threads) podríamos procesar 
los dos clientes a la vez y tardar menos tiempo en ejecutarse el programa. Para ello debemos 
de  modificar   la  clase  “​Cajera.java​
”  y  hacer  que  esta  clase  herede de  la  clase  ​
Thread  para 
heredar  y  sobre­escribir  algunos  de  sus  métodos.  Primero  vamos  a  ver  como  codificamos 
esta nueva clase “​
CajeraThread.java​
” y después explicamos sus caracteristicas. 
public​
 ​
class​
 ​
CajeraThread​
 ​
extends​
 ​
Thread​
 { 
 
private​
 ​
String​
 nombre; 
 
private​
 ​
Cliente​
 cliente; 
 private​
 ​
long​
 initialTime; 
 
// Constructor, getter & setter 
 
@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++) {  
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(); 


 

Lo  primero   que vemos  y que  ya  hemos  comentado  es  que  la  clase  “CajeraThread” debe  de 
heredar de la clase Thread: “​
extendsThread​
“. 
Otra  cosa  importante  que  vemos  es  que  hemos  sobre­escrito   el  método  “​
run()​
”  (de  ahi  la 

etiqueta  ​
@Override​
)  .  Este  método  es  imprescindibles  sobre­escribirlo  (ya que es un método  
que  esta  en  la  clase  Runnable  y  la  clase  Thread Implementa  esa  Interface) porque  en  él  se  
va  a  codificar  la  funcionalidad  que  se  ha  de  ejecutar  en  un  hilo;  es  decir,  que  lo  que  se 
programe  en  el método “​
run()​
” se va a ejecutar de forma secuencial en un hilo. En esta clase 

“CajeraThread”  se  pueden sobre­escribir más métodos para que hagan acciones sobre el hilo 
o  thread  como por  ejemplo,  parar el thread, ponerlo en reposos, etc. A continuación vamos a  
ver  como  programamos  el  método  Main  para  que  procese  a  los  clientes  de  forma  paralela y 
ver  como   se  tarda   menos  en  procesar  todo.  El  método  Main  esta  en  la  clase 
“​
MainThread.java​
” que tiene el siguiente contenido: 
public​
 ​
class​
 ​
MainThread​
 { 
 
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​
 }); 
 
// Tiempo inicial de referencia 
long​
 initialTime = ​
System​
.currentTimeMillis(); 
CajeraThread​
 cajera1 = ​
new​
 ​
CajeraThread​
(​
"Cajera 1"​...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Java
  • Java
  • java
  • JAVA
  • java
  • java
  • javiera
  • Java

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS