You are on page 1of 5

MANEJO DE HILOS Y TEMPORIZADORES EN JAVA

Universidad politécnica salesiana – sede cuenca

Abstract.- It is the class that encapsulates all the necessary control over the
threads of execution (threads). A Thread object must be clearly distinguished
from a thread or thread. This distinction is complicated, although it can be
simplified if the object is considered. Theme as the control panel of a thread of
execution (thread).

I. OBJETIVOS
 Identificar el manejo de hilos en java.
 Identificar el manejo de los temporizadores en java.
II. INTRODUCCIÓN

Es la clase que encapsula todo el control necesario sobre los hilos de ejecución
(threads). Hay que distinguir claramente un objeto Thread de un hilo de
ejecución o thread. Esta distinción resulta complicada, aunque se puede
simplificar si se considera al objeto Thread como el panel de control de un hilo
de ejecución (thread).

III. MARCO TEÓRICO

Manejo de Hilos en Java

Los Hilos o los “Threads” en Java, son básicamente una forma de poder ejecutar
varios procesos simultáneamente en nuestros programas en Java.

Usualmente para poder utilizarlos tenemos que crear clases que extienden a la clase
Thread, y reescribir el método principal “run()”, el cual es el que se va a ejecutar
principalmente al iniciar un hilo, thread o nuevo proceso en java.

Para comprender mejor el funcionamiento te proporciono el siguiente código fuente y un video


donde explico cómo usar hilos de manera sencilla.

Un Thread es un hilo de ejecución en un programa en java, el cual permite tener


múltiples instancias de hilos corriendo de forma simultánea en una aplicación. Los
hilos tienen un valor denominado prioridad, el cual puede pedir a java que en una
situación en que tenga que elegir cual proceso ejecutar inclinarse por uno u otro hilo,
por default los hilos en java se inicializan con la misma prioridad.

En java existen dos formas distintas de crear un nuevo hilo, heredando de la clase
Thread o implementando la Interfaz Runnable. Si utilizamos la opción de implementar
la interfaz Runnable, más tarde tendremos que utilizarlo de parámetro en una nueva
instancia de la clase Thread para inicializarlo. Veamos un Ejemplo utilizando estas dos
formas de crear hilos en java, se crearan dos hilos, uno creado heredando de la clase
Thread y otro implementándolo de la interfaz Runnable , también veremos la forma de
inicializarlos y el resultado al ejecutarlo, Veamos.
La clase Thread es la única forma de controlar el comportamiento de los hilos y para
ello se sirve de los métodos que se exponen en las secciones siguientes.

Métodos de Clases

Estos son los métodos estáticos que deben llamarse de manera directa en la clase
Thread.
currentThread().- Este método devuelve el objeto thread que representa al hilo de
ejecución que se está ejecutando actualmente.

yield().- Este método hace que el intérprete cambie de contexto entre el hilo actual y el
siguiente hilo ejecutable disponible. Es una manera de asegurar que nos hilos de
menor prioridad no sufran inanición.

sleep( long ).-El método sleep() provoca que el intérprete ponga al hilo en curso a
dormir durante el número de milisegundos que se indiquen en el parámetro de
invocación. Una vez transcurridos esos milisegundos, dicho hilo volverá a estar
disponible para su ejecución. Los relojes asociados a la mayor parte de los intérpretes
de Java no serán capaces de obtener precisiones mayores de 10 milisegundos, por
mucho que se permita indicar hasta nanosegundos en la llamada alternativa a este
método.

Creación de un Thread

Hay dos modos de conseguir hilos de ejecución (threads) en Java. Una es


implementando el interfaz Runnable, la otra es extender la clase Thread.

La implementación del interfaz Runnable es la forma habitual de crear hilos.


Los interfaces proporcionan al programador una forma de agrupar el trabajo de
infraestructura de una clase. Se utilizan para diseñar los requerimientos
comunes al conjunto de clases a implementar. El interfaz define el trabajo y la
clase, o clases, que implementan el interfaz para realizar ese trabajo. Los
diferentes grupos de clases que implementen el interfaz tendrán que seguir las
mismas reglas de funcionamiento.

Hay unas cuantas diferencias entre interfaz y clase, que ya son conocidas y
aquí solamente se resumen. Primero, un interfaz solamente puede contener
métodos abstractos y/o variables estáticas y finales (constantes). Las clases,
por otro lado, pueden implementar métodos y contener variables que no sean
constantes. Segundo, un interfaz no puede implementar cualquier método. Una
clase que implemente un interfaz debe implementar todos los métodos
definidos en ese interfaz. Un interfaz tiene la posibilidad de poder extenderse
de otros interfaces y, al contrario que las clases, puede extenderse de múltiples
interfaces. Además, un interfaz no puede ser instanciado con el operador new;
por ejemplo, la siguiente sentencia no está permitida:
Temporizadores en Java

Los timers son una herramienta muy útil para lanzar una tarea cada cierto tiempo, por
ejemplo, si estamos conectados a un servidor, podemos enviar información de estado
para no desconectarnos, o lanzar una tarea a una hora determinada, o incluso puede
servir para crear una animación (ya que con el tiempo va variando aquello que
hayamos dibujado, o va cambiando el fotograma).

Ejemplo:

import java . util . Timer ; import java . util . TimerTask ;

class TimerEx { public static void main(arglist [ ]){

timer ; timer=new( ) ; task=new () { ∫ tic=0 ;


@Override public void run () { if ( tic 2=¿ 0)

. out . println( TIC); else . out . prin tln( TOC);

tic++; } }; ¿/ Empezamos dentro de 10 ms y


luegolanzamos la tarea cada 1000 ms

timer . schedule (task , 10, 1000); } }

La salida de este programa será un TIC / TOC alternativamente cada segundo por la
consola, ya que la tarea la programamos cada 1000ms. Es extremadamente fácil, en
principio tenemos que crear un objeto TimerTask que defina la tarea que vamos a
ejecutar dentro de su método run(). Luego cargaremos un Timer, y con su método
schedule llamaremos a la tarea, indicándole el tiempo que debe esperar para
empezar y el tiempo tras el cual repetirá la tarea de forma indefinida.

Si sólo indicamos un argumento, la tarea se ejecutará una sola vez dentro de N


milisegundos. También se pueden especificar objetos de tipo Date por argumentos.

Por otro lado, cabe mencionar que junto con schedule() tenemos otro método,
scheduleAtFixedRate, la diferencia es que si ocurren retrasos en la ejecución de las
tareas, por ejemplo, que esté nuestra aplicación haciendo otras cosas y en lugar de
1000ms, en una de las ejecuciones se tarden 1500, la tarea se ejecutará a los 500ms
para compensar. Si el retraso es más grande, se ejecutará varias veces hasta
recuperar el ritmo. schedule(), si se retrasa no hará nada, dentro de 1000ms volverá a
ejecutar de nuevo la tarea.

IV. CONCLUSIÓN
Se puede ver las 2 formas de crear hilos en java funciona correctamente y son igual de
fácil de implementar, el método setPriority recibe como parámetro el valor que
queremos darle de prioridad al proceso en si, como valor máximo es 10 y como valor
mínimo es 1. Al cambiar este valor podemos ver reflejado el cambio en el orden en que
termina de ejecutarse uno u otro hilo debido a la prioridad que se maneje. El uso
correcto de hilos en java optimiza nuestros programas al trabajar de mejor manera el
uso de recursos del sistema.

V. REFERENCIAS

[1] http://vis.usal.es/rodrigo/documentos/aso/JavaHilos.pdf

[2]http://dhw.umh.es/alex-bia/teaching/PC/material/hilos_tutorial-java/cap10-
2.htm