post icon

Crear aplicaciones multihilo con Java

Cuando necesitamos crear procesos o subprocesos en nuestra aplicación, y a la vez queremos que la misma siga siendo utilizable por el usuario vamos a recurrir a los hilos de proceso múltiples(MultiThread).

Un ejemplo básico es, tenemos un proceso pesado y largo como el cierre contable del mes o el envío de datos a un servidor distribuido y lo mostramos gráficamente en la pantalla de usuario el progreso. Suponiendo que estos procesos demoran mas de 30 minutos durante todo ese tiempo el usuario no podrá utilizar su aplicación ya que el hilo principal estará ocupado. Podemos agregar una opción “Ejecutar en segundo plano” el cual será un SubProceso del hilo principal.

Esto en Java logramos creando una subClase dentro de nuestra clase que implemente de la clase Runnable, luego cada instancia será un hilo más. El ejemplo que pondré será muy sencillo, imprimirá la fecha y hora del sistema operativo en un jLabel, pero eso no lo hace menos explicito al tutorial, simplementen es cuestión de cambiar el código del método sobrecargado run() con el que necesiten.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class HiloHora implements Runnable {
 
	Thread hilo;
 
	public hiloHora(String name) {
		hilo = new Thread(hiloHora.this);
		hilo.setName(name);
	}
 
	@Override
	public void run() {
                GregorianCalendar cal = new GregorianCalendar();
		try {
			boolean frozen = false;
			while (!frozen) {
				hilo.sleep(1000);
				jLabel1.setText(cal.getTime().ToString());
			}
		} catch (InterruptedException e) {
			run();
			//JOptionPane.showMessageDialog(rootPane, "El hilo cayo mientras intentaba dormir..");
		} catch (Exception ex) {
			JOptionPane.showMessageDialog(rootPane, ex.getMessage());
		}   
	}
 
	public void start() {
		this.hilo.start();
	}
}
 
// corremos el subproceso al abrir la ventana
private void formWindowOpened(java.awt.event.WindowEvent evt) {
   HiloHora hilo = new HiloHora("Hora Sys");
   hilo.start();
}

Nota: Con este ejemplo tienen la bandera booleana de frozen para detener el proceso, es cuestión que lo implementen por su parte nada más.

5 Septiembre 2010

Comentarios desde Facebook:

Sin Comentarios aun, puedes tú ser el primero en comentar!

Deja tu Comentario

Responder