Mostrando entradas con la etiqueta Threads. Mostrar todas las entradas
Mostrando entradas con la etiqueta Threads. Mostrar todas las entradas

martes, 17 de noviembre de 2009

Crear un hilo

Vamos por ejemplo a crear un hilo para hacer una importación de datos a la base de datos.
Vamos a imaginarnos un proyecto en el que tenemos un enlace llamado "Importar Datos" al pinchar sobre se no va a un método que su código seria seria similar al siguiente:

public String actionImportarDatos(){

Thread hilo = new Thread() {
public void run() {

******* lineas de código para la inserción de datos ***********

}
};

hilo.start();
return null;
}

Esto nos servirá por ejemplo si después de pulsar el enlace queremos seguir navegando por la aplicación sin que se interrumpa la importación de datos.

miércoles, 11 de noviembre de 2009

Crear una tarea a una hora determinada

Para ello vamos a utilizar la clase java.util.TimerTasK y Timer.

La clase TimerTask tiene un metodo run que es como los Thread, lo que contiene el metodo run es lo que se va a ejecutar cada cierto periodo.

La clase Timer la utilizamos para para programar tareas para ejecutar en el futuro en un hilo de fondo. Las tareas se pueden programar para un tiempo de ejecución, o para la ejecución repetida a intervalos regulares.

En mi proyecto lo he colocado en la clase que arranca el proyecto, dentro de esa clase me he creado un clase interna:

class ImportarDatos extends TimerTask {
public void run() {
//// Damos baja prioridad al hilo
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

*********************tareas a realizar*****************************

}

Y dentro de la clase del listener me he creado lo siguiente:

System.out.println("*************************************");
System.out.println("* Iniciando recarga Datos...*");
System.out.println("*************************************");
try{
Timer timer= new Timer();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.AM_PM, 0);
Date date = calendar.getTime();
timer.schedule(new ImportarDatos(), date, 24 * 60 * 60 * 1000);
}catch (Exception e) {
log.debug("Error no controlado");
}
System.out.println("");

Cada vez que arranque la aplicacion se ejecutara esta tarea y tambien a la hora que le hmos puesto, hay que saber que la hora es una menos si yo he puesto a las 2 de la madrugada se ejecutara a la 1.

jueves, 6 de agosto de 2009

Tipos de Threads

Existen varios tipos de threads que pueden aparecer en una aplicación:

* Threads completamente independientes, que realizan tareas no relacionadas. Como el caso de imprimir un documento.
* Threads que trabajan con una misma tarea, es decir se ayudan entre ellos, pero sin interferir ni intercambiar relación entre ellos. Por ejemplo, threads que colaboran en el producto de dos matrices, ocupándose cada una de ellas de calcular ciertas filas de la matriz producto.
* Threads que utilizan recursos de modo mutuamente exclusivo, aunque sin tener que coordinar sus actividades. Este ocurre en los threads que intentan leer o actualizar un registro en la base de datos.
* Threads que deben coordinar sus actividades, de modo que una de ellas no puede empezar o continuar hasta que la otra haya realizado su tarea. Un ejemplo muy conocido es el problema del productor-consumidor .

Threads

Los threads o hilos de ejecución son segmentos de código de un prograna que se ejecutan secuencialmente de modo independiente de las otras partes del programa.

Utilizamos los threads en un programa para aislar y sincronizar tareas.Cada hilo se encarga de una parte del programa, por ejemplo:
  • tranferencia de ficheros
  • pintar los graficos
  • conectar a la base de datos.

La clase Thread desciente de Object e implementa la interface Runnable y no es necesario importarlas a nuestro programa ya que se encuentran dentro del paquete java.lang.

Método sleep()

Este método le dice al Thread que duerma durante los milisegundos especificados entre sus paréntesis.

Se debería utilizar cuando se pretenda retrasar la ejecución del hilo.

El sleep() no consume recursos del sistema, mientras duerme el hilo, los demás hilos se siguen ejecutando sin problema alguno