En
esta entrada vamos a ver las diferentes maneras de como trabajar con Threads en
Java (o hilos en español). Sino tienes muy claro el concepto de
la multitarea te recomendamos que te leas primero la entrada de Multitaréa e Hilos, fácil y muchas ventajas aunque
en esta entrada también veremos (en menor detalle) los conceptos y las ventajas
de la multitarea.
En esencia la multitarea nos permite
ejecutar varios procesos a la vez; es decir, de forma concurrente y por tanto
eso nos permite hacer programas que se ejecuten en menor tiempo y sean más
eficientes. Evidentemente no podemos ejecutar infinitos procesos de forma
concurrente ya que el hardware tiene sus limitaciones, pero raro es a día de
hoy los ordenadores que no tengan más de un núcleo por tanto en un procesador
con dos núcleos se podrían ejecutar dos procesos a la vez y así nuestro
programa utilizaría al máximo los recursos hardware. Para que veáis la
diferencia en un par de imágenes, supongamos que tenemos un programa secuencial
en el que se han de ejecutar 4 procesos; uno detrás de otro, y estos tardan
unos segundos:
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:
En
esta entrada no vamos a ver como utilizar todos los métodos de la clase Thread,
pero os los mostramos para que sepáis que existen y a parte por su nombre
podéis intuir su funcionalidad.
En esta entrada vamos a poner un ejemplo
para que veáis las ventajas de la multitarea, viendo como se ejecutaría un
programa sin utilizar la multitarea y otro utilizándola.
En este ejemplo vamos a simular el
proceso de cobro de un supermercado; es decir, unos clientes van con un carro
lleno de productos y una cajera les cobra los productos, pasándolos uno a uno
por el escaner de la caja registradora. En este caso la cajera debe de procesar
la compra cliente a cliente, es decir que primero le cobra al cliente 1, luego
al cliente 2 y así sucesivamente. Para ello vamos a definir una
clase “Cajera” y una clase “Cliente” el cual tendrá un “array de enteros”
que representaran los productos que ha comprado y el tiempo que la cajera
tardará en pasar el producto por el escaner; es decir, que si tenemos un array
con [1,3,5] significará que el cliente ha comprado 3 productos y que la cajera
tardara en procesar el producto 1 ‘1 segundo’, el producto 2 ‘3 segundos’ y el
producto 3 en ‘5 segundos’, con lo cual tardara en cobrar al cliente toda su
compra ‘9 segundos’.
EJEMPLO DE PROCESOS E HILOS:
VER VIDEO: https://www.youtube.com/watch?v=ZoCk8w86JlU

No hay comentarios:
Publicar un comentario