Unidad 2. Hilos

13
Programación orientada a objetos III Unidad 2. Hilos 1 Ingeniería en Desarrollo de software Semestre 05 Asignatura: Programación orientada a objetos III Unidad 2. Hilos Clave: 16142524 Universidad Abierta y a Distancia de México

description

HILOSS

Transcript of Unidad 2. Hilos

  • Programacin orientada a objetos III Unidad 2. Hilos

    1

    Ingeniera en Desarrollo de software

    Semestre 05

    Asignatura:

    Programacin orientada a objetos III

    Unidad 2. Hilos

    Clave:

    16142524

    Universidad Abierta y a Distancia de Mxico

  • Programacin orientada a objetos III Unidad 2. Hilos

    2

    ndice

    PRESENTACIN DE LA UNIDAD ........................................................................................................................ 3

    PROPSITOS DE LA UNIDAD ............................................................................................................................ 3

    COMPETENCIA ESPECFICA ............................................................................................................................... 3

    TEMARIO DE LA UNIDAD.................................................................................................................................. 3

    UNIDAD 2. HILOS ............................................................................................................................................. 4

    TEMA 2.1. PROGRAMAS CON FLUJO NICO ..................................................................................................... 4

    TEMA 2.2. PROGRAMAS DE FLUJO MLTIPLE .................................................................................................. 6

    CIERRE DE LA UNIDAD .....................................................................................................................................12

    PARA SABER MS .........................................................................................................................................13

    FUENTES DE CONSULTA ..................................................................................................................................13

  • Programacin orientada a objetos III Unidad 2. Hilos

    3

    Presentacin de la unidad

    Existen ocasiones en las que la ejecucin de un programa requiere de procesamiento

    paralelo, es decir que el programa realice diferente tareas al mismo tiempo, para ello existen

    hilos de ejecucin, los cuales permiten ese procesamiento multitarea (o multi-hilo) del que

    hablamos.

    En esta segunda unidad de la materia Programacin orientada a objetos III (POO3),

    revisars la diferencia entre programas con flujo nico y mltiple, as como el uso de hilos

    para crear programas con mltiples flujos de procesamiento. Estos temas sern tratados

    para adentrarte en la programacin multi-hilos y con ello logres crear programas con

    funciones que se ejecuten de forma paralela.

    Propsitos de la unidad

    En esta unidad logrars:

    Diferenciar el flujo de ejecucin de un programa.

    Distar el flujo nico del flujo mltiple de ejecucin de un programa.

    Crear y manipular hilos.

    Competencia especfica

    Crear programas mediante la utilizacin de hilos para el manejo de flujos mltiples de

    informacin.

    Temario de la unidad

    2. Hilos

    2.1. Programas con flujo nico

    2.1.1. Flujo normal

    2.1.2. Ejemplo de un programa con flujo nico

    2.2. Programas de flujo mltiple

    2.2.1. Creacin de hilos

    2.2.2. Estados de hilos

    2.2.3. Control de hilos

  • Programacin orientada a objetos III Unidad 2. Hilos

    4

    2. Hilos

    Los hilos en programacin, bsicamente, son procesos de ejecucin, de tal manera que si

    se programan varios hilos en una sola aplicacin; sta ser capaz de realizar varias tareas

    de manera paralela, por lo que este tema resulta de sobremanera til cuando se deban

    realizar programas con una gran carga de procesamiento de informacin. A lo largo de esta

    unidad siguiendo las lecturas y ejercicios propuestos analizars el manejo de hilos en Java.

    Por lo anterior, es importarte que atiendas a las indicaciones posteriores, pues, tendrs que

    revisar textos, ejecutar tareas y, al final, realizar tu evidencia de aprendizaje, misma que

    dar cuenta de la obtencin de la competencia de la unidad. Dicho lo anterior, entrars en

    materia con el tema 2.1. Programas con flujo nico.

    2.1. Programas con flujo nico

    Todos los programas, que hasta el momento se han realizado a lo largo de las materias de

    POO, han sido de flujo nico, pues las instrucciones de stos se van ejecutando conforme

    se van llamando; estas instrucciones pueden estar en diferentes mtodos, o clases, pero

    slo se van ejecutando de manera nica conforme son llamadas.

    Un programa de flujo nico, tarea nica o mono-hilo utiliza un nico flujo de control para

    controlar su ejecucin. Muchos programas no necesitan la potencia o utilidad de mltiples

    tareas. Sin necesidad de especificar explcitamente que se quiere un nico flujo de control.

    (Froufe, 2009, pg. 203)

    Para conocer ms a fondo sobre programas de flujo mltiple de ejecucin de un programa

    revisa1 los siguientes textos:

    En Java 2 Manual de usuario y tutorial de (Froufe 2009, p. 202), podrs encontrar

    una descripcin de lo que son los programas de flujo nico, as como un pequeo

    cdigo que ejemplifica este tipo de programas.

    En Java 2 de (Snchez 2004, p.185) se presenta una introduccin al tema de hilos,

    donde podrs encontrar una descripcin sobre el manejo de programas con un solo

    hilo, para que lo distingas de programas con la aplicacin de varios hilos.

    En El Lenguaje de Programacin Java TM (2011) encontrars una descripcin sobre

    lo que son los hilos, en l se menciona que un hilo es un flujo simple de ejecucin

    dentro de un programa, de esta misma manera encontrars un ejemplo de un

    programa con un solo hilo, para que lo comprendas mejor.

    Como ya se mencion, todos los programas realizados anteriormente caen en esta

    clasificacin de flujo nico de ejecucin. A continuacin se tiene un ejemplo de programa

    con flujo nico. Este ejemplo realiza la impresin de nmeros del 0 al 99 mediante un for, la

    1 Los textos los encontrars en la seccin descargables de la unidad.

  • Programacin orientada a objetos III Unidad 2. Hilos

    5

    interfaz grfica sugerida se puede ver en la Figura. Programa de flujo nico con impresin

    de nmeros.

    Ejemplo de cdigo 1. Impresin de nmeros en programa de flujo nico.

    private void btnEjecutarActionPerformed(java.awt.event.ActionEvent evt) {

    // TODO add your handling code here:

    String texto="";

    for(int i=0; i

  • Programacin orientada a objetos III Unidad 2. Hilos

    6

    2.2. Programas de flujo mltiple

    El flujo mltiple de ejecucin de programas permite que se estn realizando diferentes

    tareas en un programa al mismo tiempo; es decir, que las tareas se ejecuten de forma

    paralela, para ello Java utiliza unos elementos llamados hilos (thread).

    Cada hilo realiza una tarea en especfico, al tener varios hilos ejecutndose, se tendrn

    varias tareas corriendo en el mismo programa. Lo que permitir que en el mismo programa

    se estn realizando diferentes actividades al mismo tiempo. Por ejemplo si se tiene un

    sistema en red dentro de una empresa y se requiere, que al realizar una venta, se actualice

    la cuenta del cliente, las ventas del vendedor y el inventario un programa mono-hilo se

    deber ir realizando cada tarea una a una, de manera que hasta que se realice un registro

    podr procederse a realizar otro, a diferencia de un programa multi-hilo, donde podrn

    registrarse todas las tareas al mismo tiempo.

    Mientras que los programas de flujo nico pueden realizar su tarea ejecutando las sub-

    tareas 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. Para enriquecer la informacin consulta en el Java 2 Manual de

    usuario y tutorial de (Froufe, 2009, p. 215); en que se muestran los diferentes estados en

    los que puede estar una tarea (hilo), as como la comunicacin que se puede generar entre

    diferentes hilos para lograr una aplicacin ms robusta, en este texto tambin encontrars

    bloques de cdigo aplicando los conceptos que se presentan para que comprendas como

    utilizarlos en un programa.

    Los hilos de ejecucin en Java estn implementados en la clase thread, que forma parte del

    paquete java.lang. Cada hilo (thread) tiene un principio, un flujo de ejecucin y un fin

    definidos, pero no es una entidad independiente sino que debe ejecutarse en el contexto de

    un programa (Joyanes, 2002). Por lo tanto, revisa el tema 12.5. Hilos de tipo demonio en

    Joyanes (2002, p. 317), en dicho texto encontrars como crear y manejar hilos demonio, los

    cuales permiten ofrecer servicios a otros hilos de ejecucin existentes dentro del mismo

    proceso, la obra te ofrece un pequeo ejemplo para que aprendas a crear hilos demonio y

    con ello logres desarrollar programas con hilos de este tipo.

    Para conocer ms a fondo el manejo de hilos y las clases y mtodos que ayudan con su

    manipulacin y utilizacin, abre el texto Sanchez, J. (2004, p. 185) y consulta una breve

    introduccin al tema de hilos, el cual tambin se conoce como multitarea, que es la

    posibilidad de que una computadora realice varias tareas a la vez. Esa introduccin te

    ayudar a comprender mejor el concepto de hilo.

    Complementa tu informacin ingresando a la siguiente liga:

    http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html de Oracle (2012).

    Donde encontrars el tema de concurrencia que abarca el manejo de hilos, as como la

    especificacin de la clase thread y su uso. En ese apartado del tutorial de Java, podrs

  • Programacin orientada a objetos III Unidad 2. Hilos

    7

    encontrar todo el aspecto tcnico con respecto al manejo de hilos, slo debers moverte en

    el men para revisar temas ms avanzados.

    Ahora, revisa el Tema 9.2 Extensin de la clase thread de Programador Certificado Java 2,

    en Martin, (2010, p. 397) donde podrs ver cmo crear un hilo, as como los mtodos ms

    utilizados para manejarlos, estudiando este texto y analizando el cdigo que presentan

    logrars tener una visin ms concreta sobre cmo programar con hilos; se recomienda que

    crees los programas con los bloques de cdigo presentados en esta obra para que vayas

    comprendiendo y practicando al mismo tiempo.

    Para finalizar y despus de que revisaste los textos sugeridos sobre el tema de hilos, se

    presenta un ejemplo de cmo crear y manipular hilos en un programa Java, es

    recomendable que realices tu propio programa basndote en la sintaxis que se muestra en

    el ejemplo, todo ello para que analices a profundidad el cdigo y logres aplicarlo en las

    actividades que realizars para este tema.

    El cdigo est comentado, sigue los comentarios cuidadosamente para que comprendas el

    cdigo presentado.

    Ejemplo de cdigo 1. Clase para el uso de hilos

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    /**

    * Esta clase representa un hilo.

    * Hereda de la clase Thread y sobreescribe el

    * mtodo run.

    */

    public class HiloMensaje extends Thread

    {

    //Esta variable sirve para dar nombre al hilo y

    //se imprimir cada vez que el hilo est en ejecucin.

    private String nombreHilo;

    //Esta variable sirve para detener la ejecucin

    //en cualquier momento que el usuario desee.

    private boolean corriendo;

  • Programacin orientada a objetos III Unidad 2. Hilos

    8

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    /**

    * Constructor vaco para la clase HiloMensaje.

    * Asigna por default el nombre "Hilo sin nombre".

    */

    public HiloMensaje()

    {

    this ("Hilo sin nombre");

    }

    /**

    * Constructor para la clase HiloMensaje.

    * Recibe como parametro el nombre que recibira

    * el hilo.

    */

    public HiloMensaje(String nombre)

    {

    nombreHilo = nombre;

    corriendo = false;

    }

    /**

    * Devuelve el valor de la variable

    * nombreHilo.

    */

    public String getNombre()

    {

    return nombreHilo;

    }

    /**

    * Este mtodo se manda llamar de forma automtica cuando se

    * inicia la ejecucin del hilo. En otras palabras, en este mtodo

  • Programacin orientada a objetos III Unidad 2. Hilos

    9

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    * se deben escribir las instrucciones que se desean ejecutar

    * como un hilo paralelo.

    */

    @Override

    public void run()

    {

    //Esta variable servir para llevar un conteo de las veces que se itera

    //el ciclo while ms abajo.

    int i = 0;

    //Se establece la variable "corriendo" en true para indicar que el hilo

    //esta en ejecucion.

    corriendo = true;

    //Mientras la variable "corriendo" tenga el valor verdadero,

    //se imprimir un mensaje mostrando el nombre del hilo y el

    numero de veces

    //que se ha iterado en el ciclo.

    while (corriendo)

    System.out.println("Hola, soy el hilo " + nombreHilo + " en

    iteracion " + (++i));

    }

    /**

    * Sirve para saber si actualmente el hilo esta en ejecucion.

    */

    public boolean estaCorriendo()

    {

    return corriendo;

    }

    /**

    * Sirve para forzar un hilo a detenerse.

    */

    public void detener()

    {

    corriendo = true;

    }

    }

  • Programacin orientada a objetos III Unidad 2. Hilos

    10

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    Ejemplo de cdigo 2. Clase principal

    1

    2

    3

    4

    5

    /**

    * Clase principal del programa.

    *

    */

    public class Main

  • Programacin orientada a objetos III Unidad 2. Hilos

    11

    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

    {

    /**

    * Este mtodo inicia la ejecucin del programa.

    *

    * Crea dos objetos de tipo HiloMensaje (hilos) y los inicia.

    */

    public static void main(String[] args) throws Exception

    {

    // Objeto que representa el primer hilo.

    HiloMensaje hilo1 = new HiloMensaje("Hilo 1");

    // Objeto que representa el segundo hilo.

    HiloMensaje hilo2 = new HiloMensaje("Hilo 2");

    hilo1.start(); //Se inicia la ejecucin del primer hilo.

    hilo2.start(); //Se inicia la ejecucin del segundo hilo.

    //Esta instruccin detiene el hilo principal del programa

    //por dos segundos. Sin embargo, los dos hilos anteriores

    //continan su ejecucin.

    Thread.currentThread().sleep(2000);

    System.exit(0);

    }

    }

  • Programacin orientada a objetos III Unidad 2. Hilos

    12

    Para concluir este tema, realiza la Actividad 1. Flujo nico VS flujo mltiple que se presenta

    en el documento: Actividades de la unidad, donde debers distinguir el flujo nico del flujo

    mltiple de ejecucin.

    Por otra parte en la Actividad 2. Programa multi-flujo. Crears un programa que presente

    flujo mltiple de ejecucin.

    Autoevaluacin

    Para reforzar los conocimientos relacionados con los temas que se abordaron en esta

    segunda unidad del curso, es necesario que resuelvas la autoevaluacin de la unidad.

    Para realizar esta Actividad, abre tu archivo de Actividades de la unidad.

    Para concluir la unidad debers realizar la Evidencia de aprendizaje. Programa con hilos de

    esta unidad, la cual tiene como objetivo que realices un programa en Java que muestre el

    uso y manipulacin de hilos.

    Autorreflexiones

    Adems de enviar tu trabajo de la Evidencia de aprendizaje, es importante que ingreses al

    foro Preguntas de Autorreflexin y consultes las preguntas que tu Docente en lnea

    presente, a partir de ellas, debes elaborar tu Autorreflexin en un archivo de texto llamado

    DPO3_U2_ATR_XXYZ. Posteriormente enva tu archivo mediante la herramienta

    Autorreflexiones.

    Cierre de la unidad

    Has concluido la segunda unidad de la asignatura. A lo largo de esta unidad te has

    introducido en los conceptos de flujo nico y mltiple de ejecucin de tal manera que has

    distinguido el uso de hilos para generar programas que manejen varios procesos de

    ejecucin de forma paralela, tambin has estudiado las clases que Java proporciona para

    ese manejo de flujos mltiples mediante hilos. Por ltimo, en el desarrollo de la unidad, has

    estudiado la manera de lograr la manipulacin de hilos de ejecucin. Por su parte, en la

    siguiente unidad, aprenders a realizar programas que trabajen en red (es decir en ms de

    una computadora), estos programas pueden requerir de utilizar diferentes hilos de ejecucin

    en su codificacin.

    Es aconsejable que revises nuevamente la unidad en caso de que los temas que se acaban

    de mencionar no te sean familiares o no los recuerdes, de no ser este tu caso, ya ests

  • Programacin orientada a objetos III Unidad 2. Hilos

    13

    preparado(a) para seguir con la unidad tres, en donde continuars con la revisin del uso de

    sockets.

    Para saber ms

    Para que puedas ejecutar los programas que se te presentan, as como las actividades es

    importante que instales un IDE en tu computadora, se recomienda NetBeans, puedes

    descargarlo de forma gratuita de la siguiente liga: http://netbeans.org/downloads/

    Es recomendable que pruebes los cdigos que se presentan en los ejemplos que se

    encuentran en cada fuente de consulta mencionada.

    Fuentes de consulta

    Froufe, A. (2009) Java 2 Manual de usuario y tutorial. Mxico: Alfaomega.

    Joyanes, L. (2002) Java 2 Manual de programacin. Mxico: MC Graw Hill

    Martin, A. (2010) Programador Certificado Java 2 Curso practico. Mxico: Alfaomega.

    Oracle. (2011) The JAVA Tutorials. Estados Unidos de Amrica: Oracle

    Sanchez, J. (2004) Java 2. Espaa