Tutorial 8- Thread - Ejemplo Básico

7
27-4-2015 Tutorial: Thread, Ejemplo básico Norman Salvador Aráuz López -

description

Tutorial 8- Thread - Ejemplo Básico

Transcript of Tutorial 8- Thread - Ejemplo Básico

Tutorial: Thread, Ejemplo bsico

Nota: El presente tutorial asume que usted ya sabe cmo crear, agregar controles, formularios etc. a una aplicacin desde cero. Si usted no maneja estas temticas se recomienda primero realizar los tutoriales anteriores, y practicar continuamente para dominio de la sintaxis.En tutoriales anteriores vimos como validar entradas sin la necesidad de tener que usar eventos, es decir con mtodos personalizados, esta vez trataremos de hacer uso de los threads (Hilos).En sistemas operativos, un hilo de ejecucin, hebra o subproceso es la unidad de procesamiento ms pequea que puede ser planificada por un sistema operativo.La creacin de un nuevo hilo es una caracterstica que permite a una aplicacin realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecucin comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situacin de autenticacin, etc. Esta tcnica permite simplificar el diseo de una aplicacin que debe llevar a cabo distintas funciones simultneamente.Es decir, en este tutorial veremos un ejemplo sencillo de utilizacin de hilos, con el objetivo primeramente de comprender como se realizan las tareas en segundo plano, y demostrar que se puede ejecutar ms de una tarea a la vez.En este tutorial aprenderemos:1. Creacin de las clases para implementar hilos2. Creacin de hilos que implementan la clase ThreadComencemos:1. Creacin de las clases para implementar hilosPara el siguiente tutorial disearemos un formulario con dos JLabel que presentarn un nmero que ir incrementando en cierta cantidad, el primero de uno en uno y el segundo de dos en dos, con un retraso de 1000 milisegundos para que podamos observar el cambio. Cada JLabel har uso de un hilo diferente cada uno para su ejecucin, adems de ello aadiremos un JTextField con el objetivo de demostrar que mltiples hilos estn corriendo a la vez en diferentes contextos pero bajo las rdenes de la misma aplicacin, el diseo del formulario debe quedar como en la siguiente imagen:

Como se puede observar es muy sencillo, quiz no se observa en modo diseo pero aqu hay dos JLabel.

La lista de controles aparece a continuacin:Nombre del controlNombre como variable

JLabelNo es necesario

JLabelNo es necesario

JLabellblPrimerHilo

JLabellblSegundoHilo

JTextFieldtxtDatoPrimerPlano

ButtonbtnMensajePrimerPlano

Listo, ahora desde el cdigo fuente crearemos una clase llamada Hilo1, aqu crearemos un mtodo de tipo void (no devuelve nada) llamado run, este ser el que se llame en cuanto se inicie el hilo, en la cual agregaremos el siguiente bloque de cdigo:

La idea es que el hilo entre a un ciclo, donde ir asignando un valor al JLabel que hemos agregado, este valor ir cambiando de uno en uno (contador), y en cada cambio har una pausa de un segundo (1000 milisegundos), esa es la lnea de Thread.sleep();Como se puede ver la clase es privada tiene declarada una variable de tipo entera, esta simular la tarea que se lleva a cabo en el primer hilo que crearemos.Ahora, como puedes ver hay un error en la lnea de Thread.sleep, esto se corrige haciendo click en la sugerencia del IDE para corregir el error, la sugerencia indica que hay que poner un try catch, seleccionando la primera opcin.

Luego de seleccionar, el cdigo quedar como aparece en la siguiente imagen:

Como puedes ver, la clase implementa Threads (hilo) si no agregas esto la prueba no funcionar y la clase ser tomada como una clase normal que se ejecutar secuencialmente.Ahora crearemos la clase para ejecutar el segundo hilo, la idea es la misma con la diferencia que ahora haremos que el contador de esta clase aumente de dos en dos, para ver las diferencias de ejecucin entre cada hilo, a continuacin copiamos y pegamos la misma clase y le cambiamos el nombre a hilo2, y cambiamos el aumento del contador a 2. La siguiente imagen muestra la como debe quedar la clase hilo2.

Las lneas que estn enmarcadas en rojo son las nicas que cambian entre una clase y la otra. Ahora, generaremos el cdigo del botn, haciendo doble click. La idea del botn es probar que podemos realizar ms de una tarea en diferentes contextos, a continuacin el cdigo que ir dentro del botn:

La idea es simple, para que se pueda entender lo nico que haremos en el botn ser mostrar en un mensaje el contenido de la caja de texto que hemos agregado, para simular que hacemos ciertas acciones y tras de ellas hay otros sub procesos corriendo. Si quieres probar algo ms complicado puedes hacerlo, pero te recomiendo entender primero este ejemplo bsico.2. Creacin de hilos que implementan la clase ThreadCuando ya fueron creadas las clases para implementar hilos el siguiente paso es crear los objetos de cada clase, para que los hilos se creen automticamente pondremos el cdigo dentro del constructor y una vez inicie el formulario, ambos hilos empezarn a realizar su trabajo como ya lo hemos asignado:

Cuando estamos dentro del constructor, agregamos las siguientes lneas de cdigo:

Como aparece sealado, primero creamos el objeto de la clase que implementa thread (Hilo1) y luego iniciamos el hilo con la instruccin star(), que llama automticamente al mtodo run agregado en la clase designada para el primer hilo.Igualmente, creamos el segundo hilo y lo llamamos con la instruccin run(), recordemos que ambas clases son idnticas salvo algunas diferencias.Luego podemos correr el programa para verificar que hace lo que le hemos indicado que haga, como aparece en la imagen a la izquierda:

Vemos que si introducimos mensajes continuamente los hilos en segundo plano seguirn trabajando y no interferirn con el flujo de la aplicacin.

Nota: puedes repetir el tutorial una y otra vez hasta que te vuelvas un experto en el uso de hilos (Threads).