14
Rodrigo Rodriguez Ramirez Ing. Sistemas Computacionales A Tópicos Avanzados de Programación Programación concurrente multihilo Guía de estudio 1. ¿Qué diferencia existe entre utilizar la interfaz Runnable o la clase Thread al implementar una aplicación que contendrá hilos? -La interface solamente puede contener métodos abstractos y/o variables estáticas y finales, La clase puede implementar métodos y contener variables que no sean constantes. -Se tienen que implementar todos los métodos incluidos en la interfaz Runnable, y el Runable no puede ser instanciado con el operador new. -Con la clase, podemos usar el método que queramos, sin necesidad de implementarlos todos. 2. ¿Qué métodos contiene la interfaz Runnable y que función tiene éste? -La interface Runable solo declara un método llamado run(): 3. ¿Qué métodos podemos sobrescribir de la clase Thread y que función realizan? --Metodo run(): donde se escribe el código de lo que nuestro hilo se encargara de realizar 4. ¿Cuál es la importancia del método run(), en una aplicación que maneje hilos? -Es de vital importancia.

Cuestionario Threads

Embed Size (px)

Citation preview

Tpicos Selectos de Programacin

Rodrigo Rodriguez Ramirez

Ing. Sistemas Computacionales A

Tpicos Avanzados de Programacin

Programacin concurrente multihiloGua de estudio1. Qu diferencia existe entre utilizar la interfaz Runnable o la clase Thread al implementar una aplicacin que contendr hilos?-La interface solamente puede contener mtodos abstractos y/o variables estticas y finales, La clase puede implementar mtodos y contener variables que no sean constantes.

-Se tienen que implementar todos los mtodos incluidos en la interfaz Runnable, y el Runable no puede ser instanciado con el operador new.

-Con la clase, podemos usar el mtodo que queramos, sin necesidad de implementarlos todos.2. Qu mtodos contiene la interfaz Runnable y que funcin tiene ste?-La interface Runable solo declara un mtodo llamado run():3. Qu mtodos podemos sobrescribir de la clase Thread y que funcin realizan?--Metodo run(): donde se escribe el cdigo de lo que nuestro hilo se encargara de realizar4. Cul es la importancia del mtodo run(), en una aplicacin que maneje hilos?-Es de vital importancia.-Es un mtodo vaco, indicando que no se hace nada sino que se limita a definir un mtodo interfaz. No tiene sentido para el mtodo run() definir nada por defecto, porque en ltimo lugar ser utilizado para realizar los que el hilo de ejecucin necesite y los programadores de la librera de Java no pueden anticipar esas necesidades5. Qu importancia tiene el mtodo start() en el manejo de los hilos? Y a que mtodo llama? -Importante, ya que es el mtodo con el cual, comenzarn las acciones de nuestros hilos.-start(), llama al mtodo run(), para iniciar la ejecucin.

6. Por qu estados puede pasar un hilo?, en que consisten estos? Y qu mtodos intervienen en cada uno de estos?-Creado, aqu se crea el hilo y sus respectivas caractersticas que ejecutara.-Ejecutable, es este estado interviene el mtodo start(), que posteriormente llamara al mtodo run() para ser ejecutado.

-Parado, cuando alguien llama al mtodo suspend(), cuando se llama al mtodo sleep(), cuando el thread est bloqueado en un proceso de E/S o cuando utiliza su mtodo wait().

-Muerto, se puede morir por dos casas, por ejecucin terminada o matndolo con mtodo stop(), consiste en terminar repentinamente la ejecucin del cdigo del respectivo thread.

7. Si una clase implementa la interface Runnable, qu otro proceso debe de generar para que esa aplicacin se puedan generar hilos?-Se deber crear un hilo nuevo con la lnea Thread variable=new Thread, y posteriormente escribir su cuerpo de cdigo dentro del mtodo run().

8. Qu pasos se pudieran seguir para disear una aplicacin basada en hilos?-Crear una clase comn-Crear un mtodo cualquiera y crear un hilo con la line Thread variable=new Variable().

-Dentro de este mismo mtodo inicializar el hilo variable.start().

-Crear el mtodo run(), y escribir el cdigo que ejecutara nuestro hilo.

9. Qu pasos se pudieran seguir para disear una applet que contenga hilos?-Importar todas las libreras correspondientes del applet

-Crear una clase que herede la clase del applet y la del Thread y un mtodo comn, y crear los hilos dentro del mtodo

-inicializar los hilos start()-

-Definir el cdigo dentro de un nuevo mtodo run().

10. Qu tipo de aplicaciones pudieran generarse con el uso de hilos?, mencionar mnimo 10 ejemplos1- Sistemas Operativos

2- Hilo atento a una interfaz grfica mientras otro hace las operaciones de manera interna

3- Animaciones con hilos

4- Base de datos

5- Calculadoras multitareas

6- Planificador de tareas

7- Agenda

8- Navegadores web

9- Administrador de tareas10- Programa de bsqueda

11. Por que es importante manejar la prioridad de los hilos?--Los hilos se ejecutan de manera desordenada, he ah donde se encuentra la importancia de la prioridad, el planificador ejecutara el hilo con mayor importancia de los que estn esperando.

12. Cul es la prioridad estndar o dada por definicin en Java a un hilo que se crea?-la prioridad para un hilo es 0, el cual pertenece al mtodo principal.

13. En que consiste la planificacin de los hilos?-Consiste en llevar el control sobre la ejecucin de hilos (procesos) segn sus prioridades y espacios en procesador.

-Existen varios mtodos para la planificacin: Round Robin, Proceso ms corto, Tiempo restante ms corto, Mayor Relacin de Respuesta.

14. Qu es un hilo demonio y para que puede ser utilizado?, dar mnimo cinco ejemplos-Un hilo demonio es un proceso que debe ejecutarse continuamente en segundo plano.

1- Se disea para responder peticiones de otros procesos a travs de la red.

2- Los servicios de Windows3- Actualizaciones de Windows

4- Examinacin de archivos con antivirus

5- Sistemas Operativos

15. Si una aplicacin va a generar varios hilos que realicen actividades diferentes, estos pueden ser programados en la misma clase, o se requiere una clase diferente por cada actividad?, por ejemplo que unos hilos realicen la lectura de datos, otros la impriman, otros realicen operaciones de suma, otros de resta, por mencionar un caso.--Si pueden ser programados en la misma clase, al fin y al cabo estoy se ejecutan simultneamente realizando actividades diferentes.

16. Que es un programa residente en memoria?-Es un programa que permanece en la memoria del ordenador. Cualquier aplicacin que uses en tu ordenador (juego, p2p, editor de imgenes, word, etc) ocupa cierta cantidad de memoria pero cuando cierras el programa la memoria se libera y puede ser utilizada para otro fin. Los programas residentes permanecen todo el tiempo en memoria, aunque no ests utilizndolo en ese momento y por tanto ocupan permanentemente una porcin de la memoria de tu ordenador.17. Qu se entiende por una aplicacin que se ejecuta en primer plano?, da tres ejemplos--Primera aplicacin que se ve en la pantalla--Al abrir dos programas, el que est en primer plano es en el que estamos trabajando

--al utilizar una bsqueda en base de datos, la interfaz grfica es la que est en primer plano

18. Qu se entiende por una aplicacin que se ejecuta en segundo plano?, da tres ejemplos--Al hacer una bsqueda en base de datos, el algoritmo est ejecutndose en segundo plano con respecto de la interfaz grafica

--El reloj de nuestra computadora se ejecuta en segundo plano

--Las actualizaciones del sistema operativos se ejecutan en segundo plano

19. Cmo se crea un demonio en Java?-Thread[] = new Thread [tamao]

setDaemon(true)

start()

20. En qu consiste el algoritmo o protocolo de productor-monitor-consumidor, y para que se utiliza?-- El programa describe dos procesos, productor y consumidor, ambos comparten un buffer de tamao finito. La tarea del productor es generar un producto, almacenarlo y comenzar nuevamente; mientras que el consumidor toma (simultneamente) productos uno a uno. El problema consiste en que el productor no aada ms productos que la capacidad del buffer y que el consumidor no intente tomar un producto si el buffer est vaco.21. Sintaxis y ejemplos de las diferentes formas en las que se puede programar el modificador synchronized1. intcontador;2. 3. publicvoidaumentar(){4. synchronized(this){5. contador++;6. }7. }1. intcontador;2. 3. publicvoidsynchronizedaumentar(){4. contador++;5. }22. El modificador synchronized, para qu se utiliza?, escribir un ejemplo y tratar de explicarloSe utiliza este modificador sobre los atributos de los objetos para indicar al compilador que es posible que dicho atributo vaya a ser modificado por varios threads de forma simultnea y asncrona, y que no queremos guardar una copia local del valor para cada thread a modo de cach, sino que queremos que los valores de todos los threads estn sincronizados en todo momento, asegurando as la visibilidad del valor actualizado a costa de un pequeo impacto en el rendimiento.

--Crear dos cuentas de usuarios y una clase banco, las dos personas hacen retiros simultneamente, y al mismo tiempo se va actualizando la cantidad disponible en el banco, los dos usuarios retiran dinero en tiempo iguales, hasta que el dinero en el banco se agota.

23. Cundo es necesario hacer uso de la sincronizacin de hilos?, qu mecanismos (algoritmos) se pueden utilizar para la sincronizacin de hilos?--Cuando varios hilos necesitan acceso a recursos compartidos que solo pueden ser utilizados por un hilo a la vez.

24. Aparte del uso del modificador synchronized, que mtodos pueden ser utilizados para auxiliar en la sincronizacin de los hilos en una aplicacin?--wait()

--Notify()

--Notifyall()

25. Qu ventajas y que desventajas podemos tener al programar con hilos?-----VENTAJAS

--Reduccin de cdigo

--Aumento de proceso

--Mayor velocidad de clculo

--Mejor entendimiento

-----DESVENTAJAS

--Un tanto complicado

--mayor probabilidad de equivocarse al programarlo

26. Qu problemas se pueden generar con el uso de hilos?--Concurrencia de datos

--Consumo memoria

27. Cul es la medida de tiempo utilizada en los mtodos sleep(), wait()?--Milisegundos

28. A que paquete pertenece la clase Thread?--Paquete java-lang

29. Da un ejemplo de cmo crear un hilo (en sus diversas maneras)-- class Hilo extends Thread{Public class Hilo1{

Thread H1=new Thread();

H1.start();

}

Public void run()

{

Codigo

}

}

public class MiThread implements Runnable {

Thread t;

public void run() {

// Ejecucin del thread una vez creado

}

}30. Da un ejemplo de cmo activar un hilo-- class Hilo extends Thread{Public class Hilo1{

Thread H1=new Thread();

H1.start();}

Public void run()

{

System.out.println(Rodrigo Rodriguez Ramirez);

}

}

31. Da un ejemplo de cmo podemos parar un hilo sin utilizar el mtodo stop()-- class Hilo extends Thread{Public class Hilo1{

Thread H1=new Thread();

H1.start();

H1.destroy();}

Public void run()

{

System.out.println(Rodrigo Rodriguez Ramirez);

}

}

32. Para que es utilizado el modificador de tipo volatile--Indicar que un hilo ser modificado por otros de manera simultnea y des-sincronizada33. En qu consiste el paquete java.util.concurrent?--Contiene mtodos que resuelven los problemas de concurrencia de datos al ejecutar nuestra aplicacin, llevando a un mejor manejo de datos34. Qu clases e interfaces contienes para la sincronizacin de hilos?--interfaz Runnabled

--extender la clase Thread

--algunas clases del paquete concurrent para evitar la repeticin de datos

35. En qu consiste el paquete java.util.concurrent.locks?Los Locks se encuentran en el paquete java.util.concurrent.locks y proporciona una implementacin de alto rendimiento, aunque es ms manual que el uso de monitores por lo que hay que controlar adecuadamente lo que hacemos. Los locks se definen a travs de la clase ReentrantLock y sus funcionalidades a travs de una interfaz Lock.

Los Locks se crearon porque los monitores tenan algunas limitaciones como por ejemplo que no se poda interrumpir un Thread que est en wait(), los locks implcitos de los monitores deben ser liberados en el mismo bloque de cdigo que cuando se suspendi, no se puede hacer desde otro sitio.36. Qu clases e interfaces contienes para la sincronizacin de hilos?Lock, Queue, Blocking Queue.37. A groso modo explicar en que consisten las siguientes clases e interfaces:a) Interface QueueQueue es una coleccin de elementos previos a la celebracin de procesamiento. Adems de las operaciones bsicas de la coleccin, Queue proporciona insercin adicional, la eliminacin, y las operaciones de inspeccin.b) Interface Blocking QueueMtodos BlockingQueue vienen en cuatro formas, con diferentes formas de operaciones que no pueden ser satisfechas de inmediato el manejo, pero pueden ser satisfechas en algn momento en el futuro: uno produce una excepcin, la segunda devuelve un valor especial (null o false, dependiendo de la operacin), los terceros bloquea el subproceso actual de forma indefinida hasta que la operacin puede tener xito, y el cuarto bloques de slo un lmite determinado de tiempo mximo antes de abandonar.c) Interface Lock-Los locks proporcionan mayor rendimiento, con la misma semntica que la sincronizacin. Soporta timeout al adquirir un bloqueo e incluso soporte para interrumpir un hilo. Podemos decir que con los locks controlamos ms lo que hace nuestro programa, es ms manual, y por tanto, se necesita la experiencia del programador para que no tengamos fallo en el programa.d) Semaphore-Los semforos se usan para controlar el nmero de hilos que pueden acceder a un recurso. Un proceso bloqueado en el semforo, puede ser liberado por otro, esto no ocurre en los locks que veremos a continuacin.e) Barriers (clase CyclicBarrier)--Un Barrier es un tipo de mtodo de sincronizacin. Una barrier para un grupo de hilos o procesos en el cdigo fuente: cualquier hilo / proceso debe detenerse en este punto y no puede continuar hasta que todos los dems hilos / procesos llegan a esta barrera.f) ExecutorEsta interfaz proporciona una manera de desvincular la presentacin de tareas desde la mecnica de cmo se llevar a cabo cada tarea, incluyendo los detalles de uso de hilo, programacin, etc El Executor se utiliza normalmente en lugar de crear de forma explcita temas. . Por ejemplo, en vez de invocar nuevo hilo (nueva (RunnableTask ())) start () para cada uno de un conjunto de tareas,

g) Futures y CallableUn future representa el resultado de un clculo asincrnico. Se proporcionan mtodos para comprobar si el cmputo es completa, para esperar a su finalizacin, y para recuperar el resultado de la computacin. El resultado slo puede ser recuperado mediante el mtodo get cuando el clculo se ha completado, el bloqueo si es necesario hasta que est listo. La cancelacin se realiza por el mtodo de cancel. Los mtodos adicionales se proporcionan para determinar si la tarea se ha completado con normalidad o se ha cancelado.h) ExchangerUn punto de sincronizacin en la que los hilos se pueden vincular y elementos del intercambio dentro de pares. Cada hilo presenta algn objeto en la entrada al mtodo de cambio, coincide con un hilo de pareja, y recibe objetos de su socio en la declaracin. Un intercambiador puede ser visto como una forma bidireccional de un SynchronousQueue. Intercambiadores pueden ser tiles en aplicaciones tales como algoritmos genticos y diseos de tuberas.BIBLIOGRAFIA

http://proton.ucting.udg.mx/tutorial/java/Cap7/creath.htmlhttp://www.sc.ehu.es/sbweb/fisica/cursoJava/applets/threads/runnable.htmhttp://proton.ucting.udg.mx/tutorial/java/Cap7/estado.htmlhttp://arco.esi.uclm.es/~david.villa/pensar_en_C++/vol2/ch10s03s05.htmlhttp://www.angelfire.com/space/lunanueva/tareas/Planificacion.htmlhttp://www.vinagreasesino.com/articulos/los-programas-residentes-que-son-para-que-sirven-y-como-desactivar-los-programas-residentes-en-memoria.phphttps://www.google.com.mx/search?q=hacer+hilo+demonio+java&oq=hacer+hilo+de&aqs=chrome.0.69i59j69i57j69i60l2j69i59j69i60.2409j0j4&sourceid=chrome&es_sm=93&ie=UTF-8http://mundogeek.net/archivos/2009/03/30/modificadores-en-java/http://www.redeszone.net/2012/07/30/curso-java-volumen-i-introduccion-a-la-concurrencia/http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executor.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Futures.htmlhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.htmlhttp://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html