PROGRAMACION CONCURRENTE (THREAD) parte I

PROGRAMACION CONCURRENTE (THREAD) con ejemplos.

Parte I/II

Los thread (hilos) de java permiten ejecutar en paralelo varios programas que se encuentran en la misma aplicación.

Existen 2 formas de definir una clase para que pueda ejecutarse en paralelo a otras clases:

· Extendiendo la clase thread

· Implementando la interfaz Runnable.

Ejemplo:

public class SeEjecutaConcurrentemente extends Thread

public class SeEjecutaConcurrentemente implements Runnable

Puesto que Java no soporta herencia múltiple, si necesitemos heredar los miembros de una clase resuta necesario hacer uso de la interfaz Runnable; por ejemplo si desearamos crear un applet que se ejecute concurrentemente con otros programas, podemos definir nuestra clase como:

Public classAppletConcurrente extends java.applet.Applet implements Runnable

La interfaz Runnable es extremadamente sencillo: unicamente contiene el metodo run(). Cuando un Objeto que implementa esta interfaz se usa para crear n metodo thread, al arrancar el thread se ejecuta automáticamente el metodo run.

La Clase Thread que implementa la interfaz Runnable y contiene un variado grupo de constructores y metodos que permiten definir el comportamiento y evolucion de los programas concurrentes.

Las estructuras más simples de programas que usan Threads son:

Empleando la clase Thread:

———————————————————————————

Class TelefonoEnvia extends Thread {

……//propiedades, constructores y metodos de la clase

Public void run() {

……….//recoge sonidos del micrófono y envia por la red

}

}

Para crear y arrancar un thread con el comportamiento de TelefonoEnvia:

TelefonoEnvia InstanciaEnvia = new TelefonoEnvia();

InstanciaEnvia.start();

Implementando la interfaz Runnable:

Class Telefonoenvia implements Runnable {

………. // propiedades,contructores y metodos de la clase

Public void run() {

//recoge sonidos delmicrofono y los envia por la red

}

}

Para crear y arrancar un thread con el comportamiento de TelefonoEnvia:

TelefonoEnvia InstanciaEnvia = new TelefonoEnvia();

New Thread(InstanciaEnvia).start();

Como se puede apreciar en las estructuras de programa mostradas, para arrancar un Thread debemos utilizar el método start, que a su vez provoca la ejecución del método run, En la ultima línea de código mostrada, se utiliza un constructor de la clase Thread que admite un objeto Runnable como parámetro.

Un método importante de la clase Thread que debemos conocer es:

Static void sleep (long milisegundos) // detiene la ejecución del Thread al menos en el numero de milisegundos indicado.

PRIMER EJEMPLO

Este primer ejemplo hace uso de dos Threads; cada Thread imprime una frase en momentos diferentes.

La clase ThreadBasico implementa la interfaz Runnable, y por tanto su unico método run. Cada instancia de la clase ThreadBasico incorpora las propiedades Frase y Aleatorio, que contendrán el String a imprimir y una medida del tiempo que se tardará en hacerlo.

El String a imprimir le llega a la clase a través de su constructor. La propiedad Aleatorio contiene el valor numérico que le proporciona la clase Random.

El método run (que se invoca automáticamente tras el método start) imprime la frase por consola y se duerme durante un tiempo aleatorio.

Estas acciones se repiten indefinidamente en un bucle. El bloque “try catch” resulta necesario para contemplar en caso de que nuestro thread sea interrumpido.

Import java.util.Random;

Public class ThreadBasico implements Runnable {

private String Frace;

private Random Aleatorio;

public ThreadBasico (String Frase) {

this.Frase = Frase;

Aleatorio = new Random();

} // fin constructor

public void run() {

try {

do {

System.out.println(Frase);

Thread.sleep( (long) (Math.abs(Aleatorio.nextInt() ) % 500) );

} while (trae);

} catch (InterruptedException e) {}

} // fin run

} //fin class

Para probar el comportamiento de la clase ThreadBasico se proporciona la clase ThreadBasicoMain, donde se crean dos instancias de ThreadBasico. Cada instancia recibe una palabra de la consola a través del parámetro de tipo String[] del método main; de esa manera, tecleando en consola el comando de ejecución.

Ej “c:\misEjemplosJava\java ThreadBasicoMain uno dos”, en arg[0] recogemos el valor “uno” y en args[1] el valor “dos”.

Se Arrancan los 2 threads instanciados, lo que provoca la ejecución del metodo run de ambas instancias.

Public class ThreadBasicoMain {

Public static vpid main (String[] args) {

Thread PrimerHilo = new Thread ( new ThreadBasico (args[0]) );

Thread SegundoHilo = new Thread ( new ThreadBasico (args[1]) );

PrimerHilo.start();

SegundoHilo.start();

}

}// end class

Eso es todo, hasta luego.


Anuncios

About exequielc

Hola! Estás en el blog de Exequiel Catalani. Como es un blog, se trata de una extensión más o menos lineal de las cosas que hago y pasan por mi cabeza: ciberculturas, videos de la red, nuevos medios y tecnologia, y Programacion etc...

4 responses to “PROGRAMACION CONCURRENTE (THREAD) parte I”

  1. cwxwwwxwwxwx says :

    well, hi admin adn people nice forum indeed. how’s life? hope it’s introduce branch 😉

  2. ganar-dinero-plsf says :

    – Es un trabajo duro
    Muchas personas esta dispuesta a realizar un trabajo dificil al comienzo para ganar dinero, dales un tiempo, sobre todo ahora que el sol empieza a aparecer y la posibilidad de hacer cualquier otra cosa que no sea bloguear, les vencer. Tienes que dedicarle horas y eso es dificil, sobre todo si tienes otras actividades que ocupan tu tiempo, trabajo, etc.

    – La recompensa no es inmediata
    Espero que nunca hayamos dado la impresion de que un blog es un metodo facil de ganar dinero, porque no lo es. La recompensa llega meses después de haber conseguido construir tu tráfico, reputación e implicación de tus lectores. Cuando la recompensa llega lo hace poco a poco y no en grandes cantidades.

    – Es algo mas que silo escribir.
    El blogging se basa en escribir pero un bloguer que desee lectores necesita algo mas que escribir. Es importante saber comunicarse ya que el resto no puede adivinar que estás ahí. Si sólo piensas en escribir gente a una red de blogs, ya que ellos haron la promocion por ti.

    – El dinero no llega facilmente
    Muchos bloguers se decepcionan cuando no ven grandes cantidades de dinero llegando desde Adsense. Al principio debes ganar dinero de otras formas, tienes que ofrecer algo mas que tus articulos. Muchos bloguers suelen vender ebooks, cursos y audio, merchandising. Piensa en que puede interesar a tus lectores y encuentra una forma de ofrecerlo.

    Cualquiera puede ganar dinero con su blog pero solo un pequeño porcentaje consigue llegar al final con exito. Es vital, para triunfar, estar lleno de energía, no echarse para atrás por pequeñas trabas y estar dispuesto a trabajar duro. Si consigues todo eso, la respuesta es si, todo el mundo puede hacerlo.
    //ganardinero223.blogspot.com]ganar dinero

  3. dyefiadly says :

    Que Tal

    Queria felicitar a la gente que administra este maravilloso lugar por que desde que lo he empezado a frecuentar
    me ha servido bastante, siempre encuentro lo que busco y es bastante interesante a parte de que aprendo siempre que visito
    el foro, seguir asi por favor siempre con este nivel Muchas Gracias !

    Mira La Liga BBVA por Internet

  4. dyefiadly says :

    Que Tal

    Queria saludar a la gente que administra este maravilloso lugar por que desde que lo he descubierto
    me ha servido bastante, siempre encuentro lo que busco y es bastante interesante a parte de que aprendo siempre que visito
    el foro, seguir asi por favor siempre con este nivel Muchas Gracias !

    Mira La Liga BBVA por Internet

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: