Está en la página 1de 3

Creacin de Hilos

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 ms eficientes. Evidentemente no
podemos ejecutar infinitos procesos de forma concurrente ya que el
hardware tiene sus limitaciones, pero raro es a da de hoy los ordenadores
que no tengan ms de un ncleo por tanto en un procesador con dos
ncleos se podran ejecutar dos procesos a la vez y as nuestro programa
utilizara al mximo los recursos hardware
Derivacin De Clases Clase Thread
La clase Thread tiene varios constructores, adems del constructor por
argumentos. Al constructor de la clase derivada Hilo le pasamos el nombre
del subproceso y ste se lo pasa al constructor de la clase base Thread
mediante la palabra reservada super.
Creamos una clase derivada de Thread que redefine el mtodo run.
public class Hilo extends Thread {
public Hilo(String nombre) {
super(nombre);
}
public void run(){
//definir run...
}
}
Implementacin De Interfaces: Interfaz Runnable
Una de las razones por que existe la interfaz Runnable es porque a veces no
es conveniente extender la clase Thread porque se pierde la posibilidad de
extender otro objeto as que esta interfaz declara nada ms que el mtodo
public void run() y que se puede usar fcilmente para crear hilos
trabajadores.
class RunPingPONG implements Runnable {
private String word;
private int delay;
RunPingPONG(String whatToSay, int delayTime) {
word =whatToSay;
delay=delayTime;
}
public void run() {
try {
for(;;) {
System.out.print(word+" ");
Thread.sleep(delay);

}
}
catch(InterruptedException e) {
return;
}
}
public static void main(String[] args) {
Runnable ping = new RunPingPONG("ping", 40);
Runnable PONG = new RunPingPONG("PONG", 50);
new Thread(ping).start();
new Thread(PONG).start();
}
}
Existen cuatro constructores para crear hilos usando la interfaz Runnable.
public Thread(Runnable target)
public Thread(Runnable target, String name)
public Thread(ThreadGroup group, Runnable target)
public Thread(ThreadGroup group, Runnable target, String name)
La interfaz Runnable exige solamente el mtodo run(), sin embargo,
normalmente se implementan ms mtodos para crear un servicio completo
que este hilo debe cumplir.
Aunque no hemos guardado las referencias de los hilos en unas variables,
los hilos no caen en las manos del recolector de memoria: siempre se
mantiene una referencia al hilo en su grupo al cual pertenece.
El mtodo run() es pblico y en muchos casos, implementando algn tipo de
servicio, no se quiere dar permiso a otros ejecutar directamente el mtodo
run(). Para evitar eso se puede recurrir a la siguiente construccin:
class Service {
private Queue requests = new Queue();
public Service() {
Runnable service = new Runnable() {
public void run() {
for(;;) realService((Job)requests.take());
}
};
new Thread(service).start();
}
public void AddJob(Job job) {
requests.add(job);
}
private void realService(Job job) {
// do the real work
}

}
Sobrescritura Del Mtodo Run
El mtodo run() de la clase Thread proporciona la base para la definicin de
las tareas, de modo que el cdigo asociado a cada una de ellas tendr que
estar definido en el interior de este mtodo.
Si las tareas que vamos a implementar van a realizar funciones diferentes,
deberemos crear tantas subclases de Thread como tareas, codificando en el
mtodo run() de cada una de las instrucciones a ejecutar por cada tarea.
Si todas las tareas van a realizar el mismo proceso, como, por ejemplo,
atender las solicitudes que realizan los usuarios de Internet a un sitio web,
bastar con definir una nica clase con un mtodo run() comn.
El cdigo de las dos subclases de Thread donde se definen las tareas es el
siguiente:
public class Tarea1 extends Thread
{
public void run()
{
for (int i=1; i<=100;i++)
System.out.println("Numero: " + i);
}
}
public class Tarea2 extends Thread
{
public void run()
{
for (int i=-1; i<=-100;i--)
System.out.println("Numero: " + i);
}
}
http://formella.webs.uvigo.es/doc/cd02/node44.html
http://kimeraweb.com.es/java/tema54.php

También podría gustarte