Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Programación con Hilos

No description
by

Sebastian Castro

on 23 November 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Programación con Hilos

Programación con Hilos
Tambien conocida como "Programacíon Concurrente", es un tipo de programación que le permite al programa hacer diferentes procesos en un mismo tiempo, es decir, puede estar corriendo un juego y por el otro mandando paquetes a un servidor predeterminado.
Consideremos la cantidad de aplicaciones que corren a la vez dentro de un mismo entrono gráfico. Mientras una persona escribe un documento, está corriendo Microsoft Windows además de Internet Explorer, Windows Explorer, CD Player y el Control de Volumen. Estas aplicaciones son ejecutadas dentro de alguna versión de Windows. De esta forma, podemos pensar que los procesos son análogos a las aplicaciones o a programas aislados, pero realmente tiene asignado espacio propio de ejecución dentro del sistema.
Concepto de Hilo
Los hilos ó threads, son básicamente, pequeñas piezas independientes de un gran proceso. También podemos decir, que un hilo es un flujo único de ejecución dentro de un proceso.
Ventajas y Desventajas
Ventaja: Es un proceso que puede gozar de cierta autonomia.

Desventaja: Esta limitado a las capacidades del sistema donde se corre.
Primer Plano y Segundo Plano
Primer plano: Es todo aquello que el usuario ve,es decir, la parte grafica de un programa.

Segundo plano: Es todo lo que se hace por abajo de esa pantalla grafica (Se ejecuta al mismo tiempo que el visual).
Un hilo no puede correr por sí mismo, se ejecuta dentro de un programa, ya que requieren la supervisión de un proceso padre para correr.
Los hilos a menudo, son conocidos o llamados procesos ligeros.

Programación Con Hilos
Ventaja: En Java, los hilos comparten el mismo espacio de memoria. Incluso comparten gran parte del entorno de ejecución, de modo que la creación de nuevos hilos es mucho más rápida que la creación de nuevos procesos.

Desventaja: Mientras los procesos mantienen su propio espacio de direcciones y entorno de operaciones, los hilos dependen de un programa padre en lo que se refiere a recursos de ejecución.
Flujo Unico
Un programa de flujo único, tarea única o mono -hilo (single-thread) utiliza un único flujo de control (thread) para controlar su ejecución.
Por ejemplo, en la aplicación estádar de saludo para aprender cualquier lenguaje de programación:



public class HolaMundo
{
public static void main (string args[])
{
System.out.println( " Hola Mundo " );
}
}
Aqui, Cuando se llama al main(), la aplicación imprime el mensaje y termina. Esto ocurre dentro de una única tarea (thread).
Flujo Multiple
En la aplicación de Saludo, no se ve la tarea que está ejecutando el programa.
Sin embargo, java posibilita la creación de tareas explícitamente.
La utilización de las tareas (threads) en java permite una enorme
flexibilidad a los programadores a la hora de plantearse el desarrollo de aplicaciones.
Mientras que los programas de flujo único pueden realizar
su tarea ejecutando las subtareas secuencialmente, un programa multitarea permite que cada tarea comience y termine tan pronto como sea posible.
Este comportamiento presenta una mejor respuesta a la entrada en tiempo real.

A continuación, se va a modificar el programa de saludo creando tres tareas individuales, que imprimen cada una de ellas su propio mensaje de saludo.

Creacion de Hilos
En Java, existen dos mecanismo que nos permiten la creación de hilos:
• Implementando la interfaz Runnable
• Extendiendo la clase Thread, es decir, creando una subclase de ésta.

En cualquiera de los dos casos, se debe definir un método run que será el que incluya las instrucciones que se ejecutarán en el thread (hilo) y se pueden definir prioridades.
Aunque no se puede confiar en que la máquina virtual escoja para ejecutar, siempre, el de mayor prioridad, por lo que no se pueden utilizar para basar en ellas el scheduler de un sistema en tiempo real.
Clase Thread
class Repeticion extends Thread
{
private int repeticiones;
private String mensaje;

Repeticion (String msg, int n)
{
mensaje = msg;
repeticiones = n;
}

public void run()
{
for (int i= 1; i <= repeticiones; i++)
System.out.println (mensaje + " " +i);
}


public static vouid main (String args [ ]
{
Repeticion r1 = new Repeticion ("Rojo", 5);
Repeticion r2 = new Repeticion ("Azul", 80);
r1.start();
r2.start();
}
}

Cuando creamos un hilo extendiendo la clase Thread, se pueden heredar los métodos y variables de la clase padre. Si es así, una misma subclase solamente puede extender o drivar una vez la clase padre Thread. Esta limitación de Java puede ser superada a través de la implementación de Runnable que es una interfaz.
Clase Runnable
class Repeticion2 implements Runnable
{
private int repeticiones;
private String mensaje;
Repeticion2 (String msg, int n)
{
mensaje = msg;
repeticiones = n;
}
public void run ( )
{
for (int i=1; i<= repeticiones; i++;)
System.out.println(mensaje + " " + i);
}
public static void main (String args [ ])
{
Repeticion r1 = new Repeticion ("Rojo", 5);
Thread r2 = new Thread (new Repeticion2 ("Azul", 80))
r1.start ();
r2.start ();
}
}

Arranque o Inicio De Hilos
Como se pudo apreciar en los ejemplos anteriores, el arranque de un hilo debe realizarse dentro del método principal de Java, que como todos sabemos, es el método main. Y lo arrancamos llamando al método start.

r1.start ( );

start, es el método oculto en el hilo cuya función es llamar al método run.

Manipulación De Hilos
Una vez que realizamos la creación de un hilo, éste debe contener una traza de ejecución válida, la cual controlaremos en el método run del objeto.

El cuerpo de ésta función (las acciones del hilo), vienen a ser el cuerpo del programa. Es como referirnos a la rutina main pero a nivel del hilo.
Es decir, todas las acciones que nos interesa que nuestro hilo realice, deben estar especificadas en el método run. Al terminar de ejecutarse el método run, también terminará la ejecución de nuestros hilos.
Por lo anterior, la manipulación de nuestro hilos, se realiza dentro del método run.

Propiedades de los Hilos
Suspension de Hilos
También podemos realizar la suspensión de un hilo, es decir, detenerlo o desactivarlo por un intervalo de tiempo indeterminado, para ésto utilizamos la función suspend.

Este método no detiene la ejecución en forma permanente. El hilo es suspendido indefinidamente y para volver a activarlo nuevamente es necesario realizar una invocación a la función resume.

Es importante mencionar, que también existe la función sleep, pero en ésta se especifica el tiempo en milisegundos en el que el hilo permanecerá "dormido" y al término de éste tiempo el hilo continuara ejecutándose.

Detenimiento de Hilos
El método que debemos utilizar para detener la ejecución de nuestro hilo, es stop, el cual detendrá la ejecución en forma permanente.

t1.stop();

Este método no destruye el hilo, simplemente detiene su ejecución y ésta no puede ser reanudada con el método start.

Su utilidad tiene sentido, sobre todo, en aplicaciones complejas que necesiten un control sobre cada uno de los hilos que se ejecuten.
Full transcript